将data.frame列从POSIXct转换为numeric产生:" as.POSIXct.numeric(value)中的错误:' origin'必须提供"

时间:2017-04-11 13:19:23

标签: r for-loop posixct

我对r很新,所以想知道是否有人可以帮助我收到的错误信息。

我有一个data.frame AUC_sheet,其中包含POSIXct中的AUC_sheet$sys_time列,表示在操作过程中获取血压的时间。

我想将AUC_sheet转换出POSIXct,以便在曲线计算的后续区域中获得准确的结果。我已使用以下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",但它告诉我这是一个未使用的参数。

我做错了是否有明显的明显之处?

提前致谢,对不起,如果我没有提供足够的数据,我可以根据需要发布更多内容

EDIT 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

1 个答案:

答案 0 :(得分:1)

您的问题不是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