我的數據是這樣的,並已進行排序:用相同的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