Ich habe einen Datenrahmen mit Umfragen, von denen eine Spalte den Titel Date.s.administered trägt und als Zeichenfolge formatiert ist, die die Daten enthält, für die die Umfrage verwaltet wurde. Zum Beispiel "January 16-20, 2019" oder "December 1-11, 2018". Die gesamte Spalte sieht folgendermaßen aus:

[1] "November 3–5, 2018"    "November 1–2, 2018"   
[3] "October 28–30, 2018"   "October 22–28, 2018"  
[5] "October 15–28, 2018"   "October 15–28, 2018"  
[7] "October 25–26, 2018"   "October 18–21, 2018"  
[9] "October 15–21, 2018"   "October 12–18, 2018"  
[11] "October 10–14, 2018"   "October 9–13, 2018"   
[13] "October 9–13, 2018"    "October 8–13, 2018"   
[15] "October 8–11, 2018"    "October 3–9, 2018"    

Wie würde ich diese Spalte so bearbeiten, dass nur das letzte Datum der Serie angezeigt wird (z. B. wird "March 1-4, 2018" zu "March 4, 2018")?

0
Alexander Glenmore 19 Jän. 2019 im 23:18

3 Antworten

Beste Antwort

Du könntest es tun:

gsub("\\d+–", "", df$Date.s.administered)

Beispieldaten:

df <- data.frame(Date.s.administered = c("November 3–5, 2018", "November 1–2, 2018"))

Ausgabe:

[1] "November 5, 2018" "November 2, 2018"
2
arg0naut91 19 Jän. 2019 im 20:32

Sie können das Paket lubridate in Kombination mit Regex verwenden, um ein Zeichenfolgenmuster zu extrahieren und dann in ein Standard-Datumsfeld zu konvertieren.

suppressPackageStartupMessages(library(lubridate))

x <- "March 1-4, 2018"

mdy(gsub("(^.+)(\\s\\d-)(\\d)(,\\s)(\\d{4}$)", '\\1 \\3 \\5', x))
#> [1] "2018-03-04"
0
D.sen 19 Jän. 2019 im 20:34

Ein Ansatz mit tidyverse könnte sein:

date %>%
 separate(date, c("date1", "date2"), sep = "–") %>%
 mutate(date = paste(sub("[^[:alpha:]]+", "", date1), date2, sep = " ")) %>%
 select(date)

              date
1 November 2, 2018
2 October 28, 2018
3 October 28, 2018

Zuerst wird die Spalte "Datum" basierend auf "-" in "Datum1" und "Datum2" getrennt. Dann werden nur Buchstaben von "Datum1" beibehalten und mit "Datum2" in die gewünschte Spalte "Datum" kombiniert.

Beispieldaten:

date <- data.frame(date = c("November 1–2, 2018",
          "October 22–28, 2018",
          "October 15–28, 2018"))
0
tmfmnk 19 Jän. 2019 im 21:56