说我有此数据表:
Name | Pet | Hobby | Sibling
------------------------------------------
Bob | Dog | Running | Linda
Ross | Cat | Hiking | Howie
Linda | Mouse | Beaches | Bob
Howie | Plant | Gaming | Ross
因此,接下来,我想将同级的信息添加到同一行。兄弟姐妹的信息在表中。因此,基本上,您会找到同级的行,并将同级的“ Pet”和“ Hobby”行附加到该行中
Name | Pet | Hobby | Sibling | Sibling's Pet | Sibling Hobby's
-----------------------------------------------------------------
Bob | Dog | Running | Linda | Mouse | Beaches #Cols appended from Row 3 above
Ross | Cat | Hiking | Howie | Plant | Gaming #Cols appended from Row 4 above
Linda | Mouse | Beaches | Bob | Dog | Running #Cols appended from Row 1 above
Howie | Plant | Gaming | Ross | Cat | Hiking #Cols appended from Row 2 above
答案 0 :(得分:3)
我们使用match
创建一个索引,然后使用该索引来创建列
i1 <- with(df1, match(Name, Sibling))
df1[paste0("Siblings_", c("Pet", "Hobby"))] <- lapply(df1[2:3], function(x) x[i1])
df1
# Name Pet Hobby Sibling Siblings_Pet Siblings_Hobby
#1 Bob Dog Running Linda Mouse Beaches
#2 Ross Cat Hiking Howie Plant Gaming
#3 Linda Mouse Beaches Bob Dog Running
#4 Howie Plant Gaming Ross Cat Hiking
答案 1 :(得分:3)
这是使用自联接和按引用更新的data.table方法:
dt[dt, on = c("Sibling" = "Name"), `:=`(sib_pet = i.Pet, sib_hob = i.Hobby)]
# Name Pet Hobby Sibling sib_pet sib_hob
#1: Bob Dog Running Linda Mouse Beaches
#2: Ross Cat Hiking Howie Plant Gaming
#3: Linda Mouse Beaches Bob Dog Running
#4: Howie Plant Gaming Ross Cat Hiking