将 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
我是 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