【问题标题】:Find earliest date in r with pmin() in the presence of missing data在存在缺失数据的情况下,使用 pmin() 查找 r 中的最早日期
【发布时间】:2020-12-25 19:11:12
【问题描述】:

我目前正在尝试创建一个新变量以返回两个变量的最早日期。我使用了pmin() 函数,并且在both 变量中有可用日期的情况下没有问题。在 一个变量 上缺少日期,而另一个变量中缺少日期的情况下,理想情况下,我希望代码返回后一个变量中的日期。相反,返回的是 NA,我还没有想出如何解决这个问题。

我的代码如下:

df = data.frame(ID = c(1001, 1002, 1003, 1004, 1005),
                 disease_code = c('1', '1' ,'0', '1','0'),
                 Date_of_diagnosis_1 = c(NA,'13/06/1997',NA,'18/02/2005',NA),
                 Date_of_diagnosis_2 = c('12/06/1998',NA,NA,'18/09/2001',NA))

df$Date_of_diagnosis_1 <- as.Date(df$Date_of_diagnosis_1, format="%d/%m/%Y")
df$Date_of_diagnosis_2 <- as.Date(df$Date_of_diagnosis_2, format="%d/%m/%Y")

df <- transform(df, earliest_date = pmin(Date_of_diagnosis_1, 
                 Date_of_diagnosis_2, na.rm=TRUE))

更新:用户 Duck 和 Wimpel 突出显示了 na.rm 的位置错误。上面的代码现在可以正常工作了。

【问题讨论】:

  • 您的样本数据不正确...
  • 目前您的日期是字符串。 18/20/2005 是几号日期?
  • also.. try: df &lt;- transform(df, earliest_date = pmin(Date_of_diagnosis_1, Date_of_diagnosis_2, na.rm=TRUE) ).... 在您的代码中,na.rm = TRUE 的位置错误。
  • pmin() 即使使用NA 也应该可以工作,您必须在transform() 中的pmin() 中传递na.rm=T
  • 抱歉,这里已经更新了!感谢你们发现 na.rm=T 的位置错误。

标签: r date minimum


【解决方案1】:

这是data.table 的方式

library( data.table )
#make it a data.table
setDT(df)
#set dates as real date
cols = grep( "^Date", names(df), value = TRUE )
df[, (cols) := lapply( .SD, as.Date, format = "%d/%m/%Y"), .SDcols = cols]
#find minumum date in date-columns
df[, earliest_date := do.call( pmin, c( .SD, list( na.rm = TRUE ) ) ), .SDcols = cols ]

#      ID disease_code Date_of_diagnosis_1 Date_of_diagnosis_2 earliest_date
# 1: 1001            1                <NA>          1998-06-12    1998-06-12
# 2: 1002            1          1997-06-13                <NA>    1997-06-13
# 3: 1003            0                <NA>                <NA>          <NA>
# 4: 1004            1                <NA>          2001-09-18    2001-09-18
# 5: 1005            0                <NA>                <NA>          <NA>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2017-01-31
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多