我不知道这是否会准确回答你的问题,但我可以通过修改使用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
知识的其他人可以回答有关错误消息的具体问题 - 但我认为您可能需要一些解决方法。
我认为'discard'函数不喜欢POSIXlt类,但我不确定。如果您将x转换为字符,它会起作用。 – ira