Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中带日期的if语句_R - Fatal编程技术网

在R中带日期的if语句

在R中带日期的if语句,r,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" 我想在两个特定日期之间分配“1”。假设我想为2014年2月10日至2014年8月15日之间的日期分配“1”。将“值”列定义为分配值。因此,期望的输出是: date value

我有一个日期格式的数据框(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"
我想在两个特定日期之间分配“1”。假设我想为2014年2月10日至2014年8月15日之间的日期分配“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语句实现这一点?或者还有别的办法吗?我将非常高兴能得到任何帮助。非常感谢

您可以在
数据表中的
之间使用

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

您可以使用
数据表中的
中间

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

与流行的观点相反,绝对没有必要使用数据表

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

df与流行的观点相反,绝对没有必要使用数据表

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

df@oercim很乐意帮忙you@oercim很高兴帮助你我怎样才能概括日期?e、 g.c('%Y-02-10','%Y-08-15')@havefun你的意思是
sprintf(c('%s-02-10','%s-08-15'),2018:2019)
sprintf(c('%s-02-10','%s-08-15'),2018)
?我想确定多年的日期间隔(例如2011-02-10和2012-02-10应该返回相同的值)。我尝试了建议的代码,但不管设置的时间间隔是多少,它都只能工作一年。问题是函数
'between'
总是取时间间隔的第一个和第二个日期
x>=interval[1]&x@havefun那么您正在寻找类似
x>=interval[1]&x=interval[1]&x的东西我如何概括日期?e、 g.c('%Y-02-10','%Y-08-15')@havefun你的意思是
sprintf(c('%s-02-10','%s-08-15'),2018:2019)
sprintf(c('%s-02-10','%s-08-15'),2018)
?我想确定多年的日期间隔(例如2011-02-10和2012-02-10应该返回相同的值)。我尝试了建议的代码,但不管设置的时间间隔是多少,它都只能工作一年。问题是函数
'between'
总是取时间间隔的第一个和第二个日期
x>=interval[1]&x@havefun所以您正在寻找类似
x>=interval[1]&x=interval[1]&x的东西