此问题与一个数据框有关,该数据框由缺失值,日期和某些不可信的日期组成,这些日期在日期和/或月份之前带有负号。我使用代码将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
第二,如何删除日期后面的减号?感谢您在此方面的帮助。
答案 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>