2016-09-06 3 views
1

у меня есть data.table объект выглядит следующим образом:Группировка встраиваемых конструкций группы в R 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 

на самом деле меня есть data.table сгруппированы по колонке (FamilyID), и каждая из этих групп 1-1 сгруппированы б y другой столбец (InterFamilyID). В другом столбце имеется ссылка на меньший идентификатор группы другого члена группы. Я хочу использовать эти значения для доступа к ссылочным значениям строк.

ответ

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 
Смежные вопросы