0

我想使用 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。如何以正确的方式添加它?

4

1 回答 1

0

正如 Roland 在评论中指出的那样,您是否应该删除NA值尚不清楚。如果有开始时间但抗生素时间有NA,那么时间差也应该有NA。如果两个时间都是NA,那么时间差应该是NA

如果您要删除NA结果中的所有值difftime,那么您只会获得具有完整数据的那些行的结果,但是这些将不再与您的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>

reprex 包(v2.0.1)创建于 2022-01-31

于 2022-01-31T14:40:06.653 回答