【发布时间】:2019-06-03 06:55:09
【问题描述】:
我在尝试循环时遇到 R 中的错误。这是我的数据框的一个子集(包含 120000 行)。
time value mean group
1 2017-01-01 12:00:00 0.507 0.5106533 NA
2 2017-01-01 12:05:00 0.526 0.5106533 NA
3 2017-01-01 12:10:00 0.489 0.5106533 NA
4 2017-01-01 12:15:00 0.598 0.5106533 NA
5 2017-01-01 12:20:00 0.564 0.5106533 NA
6 2017-01-01 12:25:00 0.536 0.5106533 NA
假设我想根据时间段创建组,预期结果如下:
time value mean group
1 2017-01-01 12:00:00 0.507 0.5106533 A
2 2017-01-01 12:05:00 0.526 0.5106533 A
3 2017-01-01 12:10:00 0.489 0.5106533 B
4 2017-01-01 12:15:00 0.598 0.5106533 B
5 2017-01-01 12:20:00 0.564 0.5106533 C
6 2017-01-01 12:25:00 0.536 0.5106533 C
我尝试了以下代码:
for (i in 1:length(merged.data$group)){
if (merged.data[as.POSIXlt(i)$time >= "2017-05-15 12:00:00 GMT" &
as.POSIXlt(i)$time <= "2017-05-29 12:00:00 GMT",]){
merged.data$group == "A"}
else if (merged.data[as.POSIXlt(i)$time >= "2017-08-11 12:00:00" &
as.POSIXlt(i)$time <= "2017-11-29 16:00:00",]){
merged.data$group == "B"}
else if (merged.data[as.POSIXlt(i)$time >= "2018-01-05 12:00:00" &
as.POSIXlt(i)$time <= "2018-02-16 16:00:00",]){
merged.data$group == "C"}
}
我收到以下错误:
Error in as.POSIXlt.numeric(i) : 'origin' must be supplied
我不明白,我认为 POSIXlt 正在摆脱起源问题?虽然,我承认我对 R 中时间问题的理解有点混乱,每次我需要处理时间/日期时,我都很难编码......
所以我希望有人可以帮助我,如果我不清楚或者是否需要更多/更好的信息来回答我的问题,请随时告诉我。
提前感谢stackoverflowers!
【问题讨论】:
-
您的团体有哪些条件?这个
as.POSIXlt(i)$time也不是有效的 R 代码。此外,for i in 1:length(..)所以你的i是整数,你正试图将它转换为时间......你可能是指as.POSIXlt$time[i]但as.POSIXct()是矢量化的。另外,即使将其转换为时间,您也是在将其与字符("2017-05-15 12:00:00 GMT")进行比较... -
as.POSIXlt(i)失败,因为i只是一个整数,因为您从1:length(merged.data$group)循环。如果你要打电话给as.POSIXlt(i),那么你需要确保i是一个日期。 -
我要创建的组包含在日期之间。感谢您的回答 Sotos,您明确表示我对那些日期/时间问题感到困惑!正如 shwan (thx btw) 所建议的那样,我将尝试更改我的代码并将 i 作为日期。我会在我的问题中更正它,但仍然对建议感兴趣。