如何在R中比较日期变量的第一个字符与数字

dojqjjoe  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(86)

我有一个名为Start_date(类型为date)的列,我想检查条目的第一个数字,并将其与一个数字进行比较。
我已经使用下面的代码实现了我想要的结果:

filter(tripRawData_cleaned, Start_date < "2022-01-01")

这使我能够查找早于该日期的所有行。
现在我想使用第二种方法来完成此操作。通过获取Start_date的第一个数字“2”,并将其与Start_date列中的所有值进行比较,然后选择所有不以“2”开头的列。

millenium <- substr((tripRawData_cleaned$Start_date),1,1)
millenium <- as.numeric(millenium)
str(millenium)
if(millenium < 2){
  print(tripRawData_cleaned$Start_date)
}

但这是行不通的.这错误信息是:'if(millennium〈2)中出错{:条件长度〉1'谢谢

watbbzwu

watbbzwu1#

if()没有矢量化。一种解决方案是使用for()循环:

tripRawData_cleaned<-data.frame(Start_date=as.Date("1999-12-30")+0:3,
                                Value=0:3)

tripRawData_cleaned
#  Start_date Value
#1 1999-12-30     0
#2 1999-12-31     1
#3 2000-01-01     2
#4 2000-01-02     3

for (i in 1:NROW(tripRawData_cleaned)){
  if(substr(tripRawData_cleaned[i,"Start_date"],1,1) < "2"){
    print(tripRawData_cleaned[i,"Start_date"])
  }  
}

#[1] "1999-12-30"
#[1] "1999-12-31"

使用sapply循环的另一种方法

tripRawData_cleaned$Start_date[sapply(substr(tripRawData_cleaned$Start_date,1,1), function(x) x<2)]

简化方法

tripRawData_cleaned[substr(tripRawData_cleaned$Start_date,1,1) != "2",]

相关问题