x <- structure(list(SU_BIRTH_DATE = structure(c(47482, 2884, 11347,
10449, -1280, 2324), class = "Date")), row.names = c(NA, 6L), class = "data.frame", .Names = "SU_BIRTH_DATE")
x
SU_BIRTH_DATE
1 2100-01-01
2 1977-11-24
3 2001-01-25
4 1998-08-11
5 1966-07-01
6 1976-05-13
通过查看数据集,可以明显看出许多人在出生日期方面使用了拼写错误,他们在年份部分输入了 2100,而不是 2001。
我想将日期字段中任何 2100 年的部分替换为 2001 年。
我怎样才能做到这一点?
x <- x %>%
mutate(SU_BIRTH_DATE = if_else(year(SU_BIRTH_DATE) == 2100, year(SU_BIRTH_DATE) = 2001,SU_BIRTH_DATE))
Error: unexpected '=' in: "x <- x %>% mutate(SU_BIRTH_DATE = if_else(year(SU_BIRTH_DATE) == 2100, year(SU_BIRTH_DATE) ="
编辑 转换为字符并使用 str_replace,然后转换回日期是一个同时有效的解决方案,但我确信有一种更智能、代码更少的方法可以做到这一点?
x <- x %>% mutate(SU_BIRTH_DATE = str_replace_all(as.character(SU_BIRTH_DATE), "2100", "2001"),
SU_BIRTH_DATE = ymd(SU_BIRTH_DATE))
最佳答案
您可以使用 gsub
将 "2100"
替换为 "2001"
,然后将结果转换为 as.Date
.
x %>% mutate(SU_BIRTH_DATE = as.Date(gsub("2100", "2001", SU_BIRTH_DATE)));
# SU_BIRTH_DATE
#1 2001-01-01
#2 1977-11-24
#3 2001-01-25
#4 1998-08-11
#5 1966-07-01
#6 1976-05-13
我承认,这与您的 str_replace_all
方法类似,尽管更短一些。
关于r - 有条件地更改 dplyr 链中日期的年份部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49461627/