如果语句在R中有日期

时间:2015-02-07 14:57:14

标签: r

我有一个日期格式的数据框(df)。它的样本就像:

df<- as.data.frame(as.factor(c("16.04.2015", "04.08.2014", "11.09.2013",  "20.11.2015", "04.04.2014")))
colnames(df)<-"date"

即;

date
16.04.2015
04.08.2014
11.09.2013
20.11.2015
04.04.2014

我想在两个特定日期之间分配“1”。假设我想在10.02.2014和15.08.2014之间分配“1”日期。让“值”列定义为赋值。所以期望的输出是:

date        value
16.04.2015  0
04.08.2014  1
11.09.2013  0
20.11.2015  0
04.04.2014  1

如何使用R中的if语句执行此操作?或者还有其他方法吗?我会很高兴得到任何帮助。非常感谢。

2 个答案:

答案 0 :(得分:4)

您可以使用between

中的data.table
library(data.table)
setDT(df)[, value:=(as.Date(date, '%d.%m.%Y') %between% 
                       c('2014-02-10', '2014-08-15'))+0L][]
#         date value
#1: 16.04.2015     0
#2: 04.08.2014     1
#3: 11.09.2013     0
#4: 20.11.2015     0
#5: 04.04.2014     1

答案 1 :(得分:3)

与普遍看法相反,绝对没有必要使用数据表

df <- data.frame(date = as.Date(c("16.04.2015", "04.08.2014", "11.09.2013",
                                  "20.11.2015", "04.04.2014"), '%d.%m.%Y'))



`%between%` <- function(x, interval) x >= interval[1] & x <= interval[2]

df <- within(df, value <- 1 * (date %between% as.Date(c('2014-02-10', '2014-08-15'))))

#         date value
# 1 2015-04-16     0
# 2 2014-08-04     1
# 3 2013-09-11     0
# 4 2015-11-20     0
# 5 2014-04-04     1