如果在R中具有日期的语句:确定列是否落在间隔之间

时间:2018-03-16 15:56:10

标签: r

StackOverflow非常新,所以如果格式不正确,我会道歉!

d $ a显示学生注册时的情况。 d $ b显示学生是否退出,如果他们的本专栏有NA,他们仍然会注册。如果学生在2017年8月15日至2017年11月30日期间注册20天或更长时间,我想在我的数据框(d)中创建一个新列(fcount)。如果是,则fcount将为TRUE。如果没有,fcount将读为FALSE。我在将算法放入ifelse公式时遇到了麻烦。

以下是您为d $ fcount决定真或假的方法:

- 如果d $ a< = 11/10/2017& d $ b = na,然后d $ fcount = TRUE

- 如果d $ a> 11/10/2017,然后d $ fcount = FALSE

- 如果d $ a< = 11/10/2017,则d $ b = NA或d $ b必须比d $ a大20天,d $ fcount = TRUE

- 如果d $ b< 9/3/2017,然后d $ fcount = FALSE

`lastname< - c(' King',' Heathcoat',' White',' Clark',' Cobbs',' Badgette') a< -c(' 8/14 / 2017',' 8/14 / 2017',' 8/21 / 2017',' 8 / 21/2017',' 11/13 / 2017',' 11/13/2017') b< - c(' 1/30/18',NA,' 9/28/2017',' 8/29/2017',NA,& #39 3 /2018分之1&#39)

d< - data.frame(lastname,a,b)`

我想要的输出看起来像这样: Desired Output

1 个答案:

答案 0 :(得分:1)

我缩短了变量名称以减少输入并从NA中删除了引号,以便将值正确标记为缺失。将日期字符串转换为R {'1}}类后,您可以对日期进行算术运算,以检查已注册的天数。

Date
library(lubridate)

lastname <- c('King', 'Heathcoat', 'White', 'Clark', 'Cobbs')
a <- c('8/14/2017', '8/14/2017', '8/21/2017','8/21/2017', '11/13/2017')
b <- c('1/30/18', NA, '9/28/2017','8/29/2017', NA)

d <- data.frame(lastname, a, b)

# Convert date columns to Date class
d$a = mdy(d$a)
d$b = mdy(d$b)  

d$fcount = ifelse(is.na(d$b), d$a <= mdy("11/30/2017") - 20, d$b - d$a >= 20)