R数据表添加不同行中的列

时间:2018-06-26 14:55:17

标签: r dataframe data.table

说我有此数据表:

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

2 个答案:

答案 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