从其他组列中按组提取以前的值
Extract previous value by group from other group column
我有一个数据框:
ID_1 <- c("A","B","C","D","A","A","B","E","D","F","H")
ID_2 <- c("G","D","I","A","J","B","K","D","A","H","A")
Value <- c(10,9,15,27,3,28,4,3,11,19,12)
DF <- as.data.frame(cbind(ID_1, ID_2, Value))
我想要一个新列,其中包含基于另一列中相应 ID 的给定 ID ('ID_1') 的最后一个(即前面的)值 ('Value') ('ID_2')。换句话说:预期的解决方案应该为给定的 ID ('ID_1') 找到最多 recent/last 个 ID 条目 ('ID_2'),并在新的文件中提取相应的值 ('Value')列。
最终数据集应如下所示(在现有三列中添加一列;插图):
NEW <- c(NA,NA,NA,9,27,27,28,NA,3,NA,19)
DF_NEW <- as.data.frame(cbind(ID_1, ID_2, Value, NEW))
在此先感谢您的帮助!
一个选项是在 DF 上创建行号列,然后使用 data.table
滚动连接:
library(data.table)
setDT(DF)[, rn := seq_len(.N)]
DF[DF,
on=.(ID_2 = ID_1, rn = rn),
.(ID_1 = i.ID_1, ID_2 = i.ID_2, Value = i.Value, New = x.Value),
roll=Inf
]
# ID_1 ID_2 Value New
# 1: A G 10 NA
# 2: B D 9 NA
# 3: C I 15 NA
# 4: D A 27 9
# 5: A J 3 27
# 6: A B 28 27
# 7: B K 4 28
# 8: E D 3 NA
# 9: D A 11 3
#10: F H 19 NA
#11: H A 12 19
我有一个数据框:
ID_1 <- c("A","B","C","D","A","A","B","E","D","F","H")
ID_2 <- c("G","D","I","A","J","B","K","D","A","H","A")
Value <- c(10,9,15,27,3,28,4,3,11,19,12)
DF <- as.data.frame(cbind(ID_1, ID_2, Value))
我想要一个新列,其中包含基于另一列中相应 ID 的给定 ID ('ID_1') 的最后一个(即前面的)值 ('Value') ('ID_2')。换句话说:预期的解决方案应该为给定的 ID ('ID_1') 找到最多 recent/last 个 ID 条目 ('ID_2'),并在新的文件中提取相应的值 ('Value')列。
最终数据集应如下所示(在现有三列中添加一列;插图):
NEW <- c(NA,NA,NA,9,27,27,28,NA,3,NA,19)
DF_NEW <- as.data.frame(cbind(ID_1, ID_2, Value, NEW))
在此先感谢您的帮助!
一个选项是在 DF 上创建行号列,然后使用 data.table
滚动连接:
library(data.table)
setDT(DF)[, rn := seq_len(.N)]
DF[DF,
on=.(ID_2 = ID_1, rn = rn),
.(ID_1 = i.ID_1, ID_2 = i.ID_2, Value = i.Value, New = x.Value),
roll=Inf
]
# ID_1 ID_2 Value New
# 1: A G 10 NA
# 2: B D 9 NA
# 3: C I 15 NA
# 4: D A 27 9
# 5: A J 3 27
# 6: A B 28 27
# 7: B K 4 28
# 8: E D 3 NA
# 9: D A 11 3
#10: F H 19 NA
#11: H A 12 19