2015-02-07 77 views
0

我有一個日期格式的數據幀(df)。其樣本如下:如果陳述的日期在R

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」。假設我想爲2014年2月10日至2014年10月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語句來做到這一點?或者還有其他方法嗎?我會很樂意提供任何幫助。非常感謝。

回答

3

你可以使用betweendata.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 
+0

非常感謝。它工作得很好。我很感激。 – oercim 2015-02-07 15:06:28

+0

@ oercim很高興爲您效勞 – akrun 2015-02-07 15:09:16

2

流行的看法相反,這是絕對沒有必要使用數據表

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