首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当某些日期丢失时,Dplyr在日期之间更改列指示符

当某些日期丢失时,Dplyr在日期之间更改列指示符
EN

Stack Overflow用户
提问于 2020-06-12 18:28:11
回答 1查看 137关注 0票数 1

当一个列(dt_3)日期位于另外两个列(dt_1和dt_2)的日期之间时,我试图添加一个二进制列指示符。我有一个小样本的数据,但是在我的更大的集合,日期列(dt_3),我想要比较,其他有很多NA的,这是抛出错误Error: Expecting a single value:。什么是只检查非NA值是否在这两列之间的最佳方法。

下面是我的数据的一个例子:

代码语言:javascript
复制
  dt_1        dt_2         dt_3
2019-7-10   2019-8-21    2020-2-01
2019-8-22   2019-10-11   2019-9-01
2019-2-09   2019-3-02       NA

我现在的代码是:

代码语言:javascript
复制
dates %>%
      mutate(between = ifelse(between(dt_3, dt_1, dt_2), 1, 0))

预期产出:

代码语言:javascript
复制
      dt_1        dt_2         dt_3     between
    2019-7-10   2019-8-21    2020-2-01    0
    2019-8-22   2019-10-11   2019-9-01    1
    2019-2-09   2019-3-02       NA        0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 18:29:35

替代between选项的是比较运算符(>=<=),然后用0替换NA

代码语言:javascript
复制
library(dplyr)
library(lubridate)
library(tidyr)
dates %>%
     mutate(across(everything(), ymd)) %>%
     mutate(between = mutate(between = replace_na(dt_3 >= dt_1 & dt_3 <= dt_2, 0))

对于betweenleftright不是矢量化的,即它只需要一个值。一种选择是rowwise

代码语言:javascript
复制
dates %>%
   mutate(across(everything(), ymd)) %>%
   rowwise %>%
   mutate(between  = replace_na(between(dt_3, dt_1, dt_2), 0))
# A tibble: 3 x 4
# Rowwise: 
#  dt_1       dt_2       dt_3       between
#  <date>     <date>     <date>       <dbl>
#1 2019-07-10 2019-08-21 2020-02-01       0
#2 2019-08-22 2019-10-11 2019-09-01       1
#3 2019-02-09 2019-03-02 NA               0

数据

代码语言:javascript
复制
dates <- structure(list(dt_1 = c("2019-7-10", "2019-8-22", "2019-2-09"
), dt_2 = c("2019-8-21", "2019-10-11", "2019-3-02"), dt_3 = c("2020-2-01", 
"2019-9-01", NA)), class = "data.frame", row.names = c(NA, -3L
))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62350343

复制
相关文章

相似问题

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