我有一个data.table对象,如下所示:
FamilyID InterFamilyID MumInFamilyID Edu
1 1 NA 2
1 2 NA 5
1 3 2 3
2 1 NA 6
2 2 1 9
2 2 1 3
我想执行像这样的查询:
tbl1[, MumEdu:= Edu[InterFamilyID == MumInFamilyID], by=FamilyID]
得到这样的东西:
FamilyID InterFamilyID MumInFamilyID Edu MumEdu
1 1 NA 2 NA
1 2 NA 5 NA
1 3 2 3 5
2 1 NA 6 NA
2 2 1 9 6
2 2 1 3 6
实际上,我有一个按列(FamilyID)分组的data.table,这些组中的每一个都按另一列(InterFamilyID)分组。在另一列中,引用了另一个组成员的较小组ID。我想使用这些值来访问引用的行值。
答案 0 :(得分:1)
您可以使用match
:
返回第二个参数中第一个参数(第一个)匹配位置的向量。
并使用结果位置找出Edu
列中的相应元素:
tbl1[, MumEdu := Edu[match(MumInFamilyID, InterFamilyID)], by = FamilyID]
tbl1
# FamilyID InterFamilyID MumInFamilyID Edu MumEdu
#1: 1 1 NA 2 NA
#2: 1 2 NA 5 NA
#3: 1 3 2 3 5
#4: 2 1 NA 6 NA
#5: 2 2 1 9 6
#6: 2 2 1 3 6