在R中创建具有日期格式的<=>条件

Ali*_*vil 0 parallel-processing datetime r

我有以下数据框:

id<-c(1,2,3,4)
date<-c("23-01-08","01-11-07","30-11-07","17-12-07")
df<-data.frame(id,date)
df$date2<-as.Date(as.character(df$date), format = "%d-%m-%y")
Run Code Online (Sandbox Code Playgroud)

在我的表格的第四列中,我想根据日期将我的数据划分为校准和有效,以便在日期<= 2007-12-16的情况下,第四列应该calib是否应该是valid

我写了以下几行:

for ( i in 1:4)
if (df[i,3]<=2007-12-16)(df[i,4]="calib")else (df[i,4]="valid")
Run Code Online (Sandbox Code Playgroud)

第一个问题是,通过执行此命令,第4列中的所有单元格都将变为valid,并且似乎无法正确处理日期条件.所以我的第一个问题是如何解决这个问题.

第二个问题是我的真实数据框有600000行,执行这个命令需要几个小时.我想知道是否有任何方法可以更快地执行此命令并具有完整的CPU容量.

谢谢!

Dir*_*tel 5

R是矢量化的,因此您可以在单个语句中执行此操作:

R> df <- within(df,state <- ifelse(date2<=as.Date("2007-12-16"),"calib","valid"))
R> df
  id     date      date2 state
1  1 23-01-08 2008-01-23 valid
2  2 01-11-07 2007-11-01 calib
3  3 30-11-07 2007-11-30 calib
4  4 17-12-07 2007-12-17 valid
R> 
Run Code Online (Sandbox Code Playgroud)

如果within,with或者transform看起来很奇怪,你也可以直接这样做:

R> df$state <- ifelse(df$date2<=as.Date("2007-12-16"),"calib","valid")
R> df
  id     date      date2 state
1  1 23-01-08 2008-01-23 valid
2  2 01-11-07 2007-11-01 calib
3  3 30-11-07 2007-11-30 calib
4  4 17-12-07 2007-12-17 valid
R> 
Run Code Online (Sandbox Code Playgroud)