【发布时间】:2013-02-02 19:30:03
【问题描述】:
我正在尝试为每个单独的 ID 标签“1”、“2”和“3”循环一个数据矩阵(请参阅底部的数据)。最终,我这样做是为了使用 ts() 函数将 X 和 Y 坐标转换为时间序列,但首先我需要在函数中构建一个循环,该函数为每个单独的 ID 返回一个时间序列。当我对数据框使用以下代码时,循环本身工作得很好:
for(i in 1:3){
print(na.omit(xyframe[ID==i,]))
}
返回以下输出:
Timestamp X Y ID
1. 0 -34.012 3.406 1
2. 100 -33.995 3.415 1
3. 200 -33.994 3.427 1
Timestamp X Y ID
4. 0 -34.093 3.476 2
5. 100 -34.145 3.492 2
6. 200 -34.195 3.506 2
Timestamp X Y ID
7. 0 -34.289 3.522 3
8. 100 -34.300 3.520 3
9. 200 -34.303 3.517 3
然而,当我想用相同的代码在矩阵中产生一个循环时:
for(i in 1:3){
print(na.omit(xymatrix[ID==i,])
}
它返回以下错误:
Error in print(na.omit(xymatrix[ID == i, ]) :
(subscript) logical subscript too long
为什么在矩阵中循环 ID 却不起作用,而它对数据帧起作用,我该如何解决? 此外,我是否读到循环需要更多的计算强度,然后基于向量做同样的事情,有没有办法基于这个向量做?
数据(真实数据的简化):
Timestamp X Y ID
1. 0 -34.012 3.406 1
2. 100 -33.995 3.415 1
3. 200 -33.994 3.427 1
4. 0 -34.093 3.476 2
5. 100 -34.145 3.492 2
6. 200 -34.195 3.506 2
7. 0 -34.289 3.522 3
8. 100 -34.300 3.520 3
9. 200 -34.303 3.517 3
【问题讨论】:
-
您是否在其他地方声明了一个名为
ID的变量?您的代码 sn-p 没有使用数据框或矩阵中的 ID 列,而是使用另一个名为 ID 的变量。