我的数据是这样的,并已进行排序:用相同的ID创建一个包含以前的值新列
> dput(df)
structure(list(id = c(1, 2, 3, 3, 2, 2, 1), x = c(20, 40, 70,
70, 80, 40, 70)), .Names = c("id", "x"), row.names = c(NA, -7L
), class = "data.frame")
> df
id x
1 1 20
2 2 40
3 3 70
4 3 70
5 2 80
6 2 40
7 1 70
我需要创建一个包含x
具有相同id
于前值的新列。所以结果应该是:
> df
id x old_x
1 1 20 70
2 2 40 80
3 3 70 70
4 3 70 NA
5 2 80 40
6 2 40 NA
7 1 70 NA
我能做到这样:
for (i in 1:nrow(df)){
id0 = df$id[i]
j = i + match(id0 , df$id[i+1:nrow(df)])
df$old_x[i] = df$x[j]
}
,但它过于缓慢。什么是最好的方法来做到这一点?
感谢您的帮助!
以前的值还是下一个值?您的输出是下一个值。如果它是以前的值,则使用'lag'而不是'lead' – Sumedh
我的意思是'previous',因为我的数据实际上是按降序排列的。 – Scarabee