[英]Difftime in R with missing times: how to add 'na.rm=TRUE'?
我想使用 difftime() 来提取 as.posixct 两个日期/时间变量之间的差异。 但有时缺少一个(或两个)值(NA),如下所示。
Start time Antibiotic time
2016-06-28 08:36:00 NA
2019-10-30 10:43:00 2019-10-30 10:11:56
NA NA
我想要:开始时间 - 抗生素时间 喜欢:Antibiotica$ABS <- difftime(Antibiotica$StartTime, Antibiotica$AntibioticTime, units=c("mins"), na.rm=TRUE)
但是现在,我得到一个错误。 我认为这是因为错误使用了 na.rm=TRUE。 如何以正确的方式添加它?
正如 Roland 在评论中指出的那样,您是否应该删除NA
值尚不清楚。 如果有一个开始时间但抗生素时间是NA
,那么时间差也应该是NA
。 如果两个时间都是NA
,那么时间差应该是NA
如果您要删除生成的difftime
中的所有NA
值,那么您将只获得具有完整数据的那些行的结果,但是这些将不再与您的Antibiotica
数据框匹配。 例如,在您的小示例数据框中,您只会得到一个非 NA 结果。 您将如何将其存储在列中?
从您的示例中,您的代码应该像这样工作:
Antibiotica$ABS <- difftime(Antibiotica$StartTime, Antibiotica$AntibioticTime)
Antibiotica
#> StartTime AntibioticTime ABS
#> 1 2016-06-28 08:36:00 <NA> NA mins
#> 2 2019-10-30 10:43:00 2019-10-30 10:11:56 31.06667 mins
#> 3 <NA> <NA> NA mins
如果您没有得到这个结果,您可能需要确保您的列采用实际的日期时间格式(例如,确保class(Antibiotica$StartTime)
不是"character"
)。
如果,一旦你有了计算并且你只想有完整的案例,你可以做
Antibiotica[complete.cases(Antibiotica),]
#> StartTime AntibioticTime
#> 2 2019-10-30 10:43:00 2019-10-30 10:11:56
使用的数据
Antibiotica <- structure(list(StartTime = structure(c(1467102960, 1572432180, NA),
class = c("POSIXct", "POSIXt"), tzone = ""),
AntibioticTime = structure(c(NA, 1572430316, NA),
class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, -3L),
class = "data.frame")
Antibiotica
#> StartTime AntibioticTime
#> 1 2016-06-28 08:36:00 <NA>
#> 2 2019-10-30 10:43:00 2019-10-30 10:11:56
#> 3 <NA> <NA>
由代表 package (v2.0.1) 于 2022 年 1 月 31 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.