Ich weiß nicht, ob dies genau Ihre Frage beantworten, aber ich war in der Lage, die discard
Funktion nutzen durch Modifizieren der Code ein wenig. Hier ist, was ich getan habe:
date1 <- readr::parse_date(c("2017-01-30", "2017-02-03", " "))
date2 <- readr::parse_date(c("2016-01-30", "", "2016-02-03"))
df <- tibble(date1, date2)
df
# A tibble: 3 x 2
date1 date2
<date> <date>
1 2017-01-30 2016-01-30
2 2017-02-03 NA
3 NA 2016-02-03
Seit keep
und discard
beide arbeiten mit Vektoren, es sieht aus wie Daten, um sie zu übergeben hat in einer bestimmten Art und Weise, weshalb ich glaube, die map
Funktion besser funktioniert bei Versorgung discard
mit die Daten so, wie es gefällt.
map_df(df, discard, is.na)
# A tibble: 2 x 2
date1 date2
<dttm> <dttm>
1 2017-01-30 2016-01-30
2 2017-02-03 2016-02-03
Es funktioniert auch, wenn Sie strptime
auch verwenden mögen: obwohl
date1 <- strptime(c("2017-01-30", "2017-02-03", ""), "%Y-%m-%d")
date2 <- strptime(c("2016-01-30", "", "2016-02-03"), "%Y-%m-%d")
df <- data.frame(date1, date2)
df
date1 date2
1 2017-01-30 2016-01-30
2 2017-02-03 <NA>
3 <NA> 2016-02-03
map_df(df, discard, is.na)
# A tibble: 2 x 2
date1 date2
<dttm> <dttm>
1 2017-01-30 2016-01-30
2 2017-02-03 2016-02-03
Sie können nicht erstellen tibble mit der POSIXlt
Klasse, und wenn Sie feststellen, nach dem Ausführen der map_df
Funktion Datum-Uhrzeit-Objekte werden in POSIXct konvertiert.
Hoffentlich jemand anderes mit tieferen purrr
Wissen kann die spezifische Frage über die Fehlermeldung beantworten - ich dachte, Sie möchten vielleicht einige Abhilfe in der Zwischenzeit, aber.
Ich denke, dass die Funktion 'discard' die POSIXlt-Klasse nicht mag, aber ich bin mir nicht sicher. Es funktioniert, wenn Sie x in Zeichen konvertieren. – ira