使用“处理data.frame”;日期“;包含空值的列

使用“处理data.frame”;日期“;包含空值的列,r,dataframe,R,Dataframe,我想比较两个“日期字符串”列,如: df$住院病人死亡=(df$死亡日期==出院日期) 但是:NULL值的出现似乎阻止我将格式化为.Date,并阻止不同的格式使用as.character(..)==as.character(..)。 最好的创作方式是什么 THIS IS THE AIM: id date.of.death date.of.discharge [ i

我想比较两个“日期字符串”列,如:

df$住院病人死亡=(df$死亡日期==出院日期)

但是:
NULL
值的出现似乎阻止我将
格式化为.Date
,并阻止不同的格式使用as.character(..)==as.character(..)。 最好的创作方式是什么

                                                    THIS IS THE AIM:
  id           date.of.death date.of.discharge    [ inpatient.death ]
1  1 2012-01-01 00:00:00.000        2012-01-01    [            TRUE ]
2  2                    NULL        2012-01-01    [           FALSE ]
3  3 2012-01-02 00:00:00.000        2012-01-01    [           FALSE ]

df <- data.frame(id=1:3, date.of.death=c("2012-01-01 00:00:00.000", "NULL", "2012-01-02 00:00:00.000"), date.of.discharge=c("2012-01-01", "2012-01-01", "2012-01-01"))
这就是目标:
id日期死亡日期出院日期[住院病人死亡]
1112012-01-01 00:00:00.000 2012-01-01[真实]
2空的2012-01-01[假]
2012-01-02 00:00:00.000 2012-01-01[假]

df
df
df
NULL值来自哪里?在R
NA中,NA
用于缺少的值,并且您的data.frame不应包含任何
NULL
值。这意味着您要做一些不寻常的事情来创建data.frame,并且应该尝试更正它。另一种可能是使用
df$date.of.death[is.null(df$date.of.death)]注意,您的示例df只包含一个字符
“null”
,它不是
null
值。如果您有,您可能应该使用
read.table
na.strings
参数或用于读取文件的任何函数。@Roland:“NULL”来自csv导入,但我后来使用as.Date(df$Date.of.death,“%Y-%m-%d 00:00:00.000”)成功地转换为as.Date。
NULL
值来自何处?在R
NA中,NA
用于缺少的值,并且您的data.frame不应包含任何
NULL
值。这意味着您要做一些不寻常的事情来创建data.frame,并且应该尝试更正它。另一种可能是使用
df$date.of.death[is.null(df$date.of.death)]注意,您的示例df只包含一个字符
“null”
,它不是
null
值。如果您有,您可能应该使用
read.table
na.strings
参数或您用来读取文件的任何函数。@Roland:“NULL”来自csv导入,但我后来使用as.Date(df$Date.of.death,“%Y-%m-%d 00:00.000”)成功地转换为as.Date
df <- data.frame(id=1:3, date.of.death=c("2012-01-01 00:00:00.000", "NULL", "2012-01-02 00:00:00.000"),
                 date.of.discharge=c("2012-01-01", "2012-01-01", "2012-01-01"))

df$inpatient.death <- as.Date(df$date.of.death)==as.Date(df$date.of.discharge) # date.of.death is already in the standard format no need to specify
df$inpatient.death[is.na(df$inpatient.death)] <- F

> df
  id           date.of.death date.of.discharge inpatient.death
1  1 2012-01-01 00:00:00.000        2012-01-01            TRUE
2  2                    NULL        2012-01-01           FALSE
3  3 2012-01-02 00:00:00.000        2012-01-01           FALSE

# you can also definy an helper function for this task

`==2` <- function(x,y){
  res <- x==y
  res[is.na(res)] <- F
  res
}

df$inpatient.death <- `==2`(as.Date(df$date.of.death),as.Date(df$date.of.discharge))

> df
  id           date.of.death date.of.discharge inpatient.death
1  1 2012-01-01 00:00:00.000        2012-01-01            TRUE
2  2                    NULL        2012-01-01           FALSE
3  3 2012-01-02 00:00:00.000        2012-01-01           FALSE