将 data.frame 列从 POSIXct 转换为数字生成:"Error in as.POSIXct.numeric(value) : 'origin' must be supplied"

Convert data.frame column from POSIXct to numeric produces: "Error in as.POSIXct.numeric(value) : 'origin' must be supplied"

我是 r 的新手,所以想知道是否有人可以帮助解决我收到的错误消息。

我有一个 data.frame AUC_sheet,其中包含 POSIXct 中的 AUC_sheet$sys_time 列,代表手术期间血压读数的时间。

我想从 POSIXct 中转换 AUC_sheet,以便在后续的曲线下面积计算中得到准确的结果。我使用了以下 for 循环来执行转换:

for(i in 1:length(AUC_sheet$sys_time)){
AUC_sheet$sys_time[i] <- as.numeric(difftime(time1 = AUC_sheet$sys_time[1],
                                             time2 = AUC_sheet$sys_time[i], units = "hours"))
}

但我不断收到如下错误信息

Error in as.POSIXct.numeric(value) : 'origin' must be supplied

我试过使用 origin = "1970-01-01" 但它告诉我这是一个未使用的参数。

有没有明显我做错的地方?

在此先感谢,如果我没有提供足够的数据,我很抱歉,如果需要,我可以 post 作为编辑

编辑 AUC_sheet$sys_time 看起来像这样

     sys_value            sys_time
       <dbl>              <time>
1         85 2013-08-28 12:48:24
2         NA 2013-08-28 12:48:39
3         NA 2013-08-28 12:48:54
4         NA 2013-08-28 12:49:08
5         NA 2013-08-28 12:49:24
6        170 2013-08-28 12:49:38
7        150 2013-08-28 12:49:54
8        167 2013-08-28 12:50:09
9        175 2013-08-28 12:50:24
10       167 2013-08-28 12:50:39
# ... with 549 more rows

您的问题不在于 as.numeric 调用本身。问题是您正试图将该调用的结果写入一个 POSIXct 列。因此,R 尝试将其转换为正确的格式,但失败了,因为转换方法需要一个来源。 如果您写入一个新列(或者,更好的是,将 for 循环编写为单个矢量化操作以避免该问题),那么您应该没有问题。

# make up some dummy data for testing
AUC = data.frame(sys_value = 1:100, sys_time = as.POSIXct(Sys.time() + 1:100))

for(i in 1:length(AUC$sys_time)){
  AUC$sys_time[i] <- as.numeric(difftime(time1 = AUC$sys_time[1],
                                     time2 = AUC$sys_time[i], units = "hours"))
} # this doesn't work, because you're mixing data types in the sys_time column


for(i in 1:length(AUC$sys_time)){
  AUC$sys_time_diff[i] <- as.numeric(difftime(time1 = AUC$sys_time[1],
                                          time2 = AUC$sys_time[i], units = "hours"))
} # this works, because the numeric data isn't being added to a time column