我不知道这是否能准确回答您的问题,但我可以discard
通过稍微修改代码来使用该功能。这是我所做的:
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
由于keep
和discard
两者都使用向量,看起来数据必须以特定方式传递给它们,这就是为什么我认为该map
函数更适合以discard
它喜欢的方式提供数据。
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
如果您也想使用它也可以使用strptime
:
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
但是,您不能使用POSIXlt
该类创建 tibble,如果您注意到,在运行该map_df
函数后,日期时间对象将转换为 POSIXct。
希望其他purrr
知识渊博的人可以回答有关错误消息的特定问题-但是,我认为您可能同时需要一些解决方法。