我有与会者都输入自己的出生日期在各种各样的格式问卷数据:
ID <- c(101,102,103,104,105,106,107)
dob <- c("20/04/2001","29/10/2000","September 1 2012","15/11/00","20.01.1999","April 20th 1999", "04/08/01")
df <- data.frame(ID, dob)
做任何分析之前,我需要能够到子集的数据,当它是不正确的格式(即,DD / MM /年),然后手动校正依次在每个细胞中。
我试着使用:
df$dob <- strptime(dob, "%d/%m/%Y")
...突出其我的日期是正确的格式,但我只是得到NAS进行不正确地输入的日期,如果我想后来改变他们(使用ID作为参考),这是没有帮助的。
有没有人有可能能够帮助我的任何想法?
退房lubridate
包。
library(lubridate)
parse_date_time(dob, c("dmy", "Bdy"))
# [1] "2001-04-20 UTC" "2000-10-29 UTC" "2012-09-01 UTC" "0000-11-15 UTC" "1999-01-20 UTC"
# [6] "1999-04-20 UTC" "0001-08-04 UTC"
免责声明:我不知道我是否完全了解你的问题。
在下面的代码片段,dob2将包含基于DOB是否处于正确格式的日期或NA。 你应该能够筛选is.na(dob2)得到不正确的数据。 需要注意的是2013年3月4日可以解释为3月3日或4月4日,但你似乎是假设它是4月3日,所以我用它去了。
ID <- c(101,102,103,104,105,106,107)
dob <- c("20/04/2001","29/10/2000","September 1 2012","15/11/00","20.01.1999","April 20th 1999", "04/08/01")
df <- data.table(ID, dob)
df[,dob2 := as.Date(dob, "%d/%m/%Y")]
编辑 - 添加输出。 顺便说一句,你也可以做类似df[is.na(as.Date(dob, "%d/%m/%Y"))]
ID dob dob2
1: 101 20/04/2001 2001-04-20
2: 102 29/10/2000 2000-10-29
3: 103 September 1 2012 <NA>
4: 104 15/11/00 0000-11-15
5: 105 20.01.1999 <NA>
6: 106 April 20th 1999 <NA>
7: 107 04/08/01 0001-08-04