R中的子集日期格式错误

时间:2013-09-26 12:20:08

标签: r date date-formatting format-conversion

我有调查问卷数据,参与者以各种格式输入他们的出生日期:

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 / yr)对数据进行子集化,然后手动依次更正每个单元格。

我尝试使用:

df$dob <- strptime(dob, "%d/%m/%Y")

...要突出显示我的哪个日期格式正确,但我只是为输入错误的日期获取了NA,如果我想随后更改它们(使用ID作为参考),则无效。

有没有人有任何想法可以帮助我?

2 个答案:

答案 0 :(得分:3)

查看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"

答案 1 :(得分:-1)

免责声明:我不确定我是否完全理解你的问题。

在下面的代码段中,dob2将根据dob格式是否正确包含日期或NA。您应该能够过滤is.na(dob2)以获取不正确的数据。请注意,03/04/2013可以解释为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