Таблица данных R Добавить столбцы из разных строк - PullRequest
0 голосов
/ 26 июня 2018

Скажите, у меня есть эти данные таблицы:

Name  |  Pet  | Hobby    | Sibling
------------------------------------------
Bob   | Dog   | Running  | Linda
Ross  | Cat   | Hiking   | Howie
Linda | Mouse | Beaches  | Bob
Howie | Plant | Gaming   | Ross

Итак, я хочу добавить информацию о родном брате в ту же строку. Информация родного брата находится в таблице. По сути, вы найдете строку брата и добавите к строке ряды «Домашнее животное» и «Хобби» брата как таковые

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 голосов
/ 26 июня 2018

Вот подход 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
0 голосов
/ 26 июня 2018

Мы создаем индекс с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...