日期和令人难以置信的日期

时间:2019-10-10 03:48:20

标签: r date dataframe

此问题与一个数据框有关,该数据框由缺失值,日期和某些不可信的日期组成,这些日期在日期和/或月份之前带有负号。我使用代码将Excel文件中的数据读入R

df <- data.frame(read_excel("dat.xlsx", col_types = c("numeric", "guess"))) 

这会将日期更改为数值。当然,如果要获取日期,可以将上面代码中的“ guess”替换为“ date”。但是,我想获得难以置信的日期,并用NA替换所有其他条目。数据帧的一个示例是

df<-data.frame("id"=c(1,2,3,4,5),
"date" = c("-2/8/2018","-22/11/2018","-1/-2/2018",39586,"NA"))

数值39586实际上是一个日期(即2008年11月4日),该日期在将excel文件读入R后转换为数字。

使用

df$date<-df[is.integer(df$date)] <- NA

我尝试将所有整数转换为NA并保留不合理的日期,但是date列的所有组件均更改为NA,即

  id date
1  1   NA
2  2   NA
3  3   NA
4  4   NA
5  5   NA

如何解决?预期的输出看起来像

  id        date
1  1   -2/8/2018
2  2 -22/11/2018
3  3  -1/-2/2018
4  4          NA
5  5          NA

第二,如何删除日期后面的减号?感谢您在此方面的帮助。

1 个答案:

答案 0 :(得分:2)

我们可以使用gsub将带有负号的数字替换为99,然后使用replace将不遵循日期格式的值转换为NA

df$date <- gsub("-\\d+", "99", df$date)
df$date <- replace(df$date, !grepl("\\d+/\\d+/\\d+", df$date), NA)
df

#  id       date
#1  1  99/8/2018
#2  2 99/11/2018
#3  3 99/99/2018
#4  4       <NA>
#5  5       <NA>
相关问题