首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >purrr::丢弃NA日期

purrr::丢弃NA日期
EN

Stack Overflow用户
提问于 2017-01-30 19:27:49
回答 1查看 280关注 0票数 1

假设我有一个POSIX向量

代码语言:javascript
复制
x <- strptime(c("2017-01-30", ""), "%Y-%m-%d")
x
[1] "2017-01-30 EET" NA  

我想放弃和purrr::discard的约会

代码语言:javascript
复制
> library(purrr)
> discard(x, is.na)
Error: Result 1 is not a length 1 atomic vector

有人能解释一下为什么会抛出一个错误吗?

例如,For

代码语言:javascript
复制
y <- c(1, NA)

它工作得很好:

代码语言:javascript
复制
> discard(y, is.na)
[1] 1
EN

回答 1

Stack Overflow用户

发布于 2017-05-12 02:09:13

我不知道这是否能准确地回答您的问题,但是我可以通过稍微修改代码来使用discard函数。下面是我所做的:

代码语言:javascript
复制
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  

因为keepdiscard都使用向量,所以看起来数据必须以特定的方式传递给它们,这就是为什么我认为map函数在以它喜欢的方式向discard提供数据方面效果更好。

代码语言:javascript
复制
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,也可以使用它:

代码语言:javascript
复制
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函数之后,date-time对象将被转换为POSIXct。

希望其他具有较深purrr知识的人能够回答有关错误消息的特定问题--但是,我认为您可能需要一些解决方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41934765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档