【发布时间】:2014-03-03 21:16:13
【问题描述】:
我正在处理车辆 ID 随时间重复的数据集。单个车辆的示例如下所示:
df <- data.frame(veh = rep(2,15), lane=c(rep(3,5), rep(4,5), rep(5,5)), frame=1:15)
我想添加一个新列,其中“是”表示车道发生了变化,“。”意味着没有变道。我使用 ddply 如下:
> ddply(df, 'veh', transform,change=c(NA,ifelse(diff(df$lane)!=0,"yes","." )))
veh lane frame change
1 2 3 1 <NA>
2 2 3 2 .
3 2 3 3 .
4 2 3 4 .
5 2 3 5 .
6 2 4 6 yes
7 2 4 7 .
8 2 4 8 .
9 2 4 9 .
10 2 4 10 .
11 2 5 11 yes
12 2 5 12 .
13 2 5 13 .
14 2 5 14 .
15 2 5 15 .
这给了我想要的输出。但是,在我的原始数据集中,还有更多车辆 ID(df 中的“veh”)。第一个车辆 id '14' 重复 455 次,总行数为 23454。当我对原始数据集使用相同的函数时,出现以下错误:
> hv1 <- ddply(hv, 'Vehicle.ID', transform,change=c(NA,ifelse(diff(hv$Lane)!=0,"yes","." )))
Error in data.frame(list(Vehicle.ID = c(14L, 14L, 14L, 14L, 14L, 14L, :
arguments imply differing number of rows: 455, 23454
请注意,“hv”是我的原始数据集的名称。能否指出代码中的问题?
【问题讨论】:
-
摆脱
hv$;否则transform将尝试插入数据框中的整个列,而不是ddply作为第一个参数给出的部分。 -
@BrodieG 谢谢!删除 hv$ 解决了这个问题。