R数据表添加来自不同行的列

R数据表添加来自不同行的列,r,dataframe,data.table,R,Dataframe,Data.table,假设我有这个数据表: Name | Pet | Hobby | Sibling ------------------------------------------ Bob | Dog | Running | Linda Ross | Cat | Hiking | Howie Linda | Mouse | Beaches | Bob Howie | Plant | Gaming | Ross 接下来,我想将兄弟姐妹的信息添加到同一行。表中列出了兄弟姐妹的

假设我有这个数据表:

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

我们使用
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

i1以下是一种使用自连接和引用更新的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

谢谢,这是我最喜欢的解决方案!