Замените значения двух столбцов данных на основе значений столбца другого кадра данных. - PullRequest
0 голосов
/ 16 января 2019

У меня есть 2 кадра данных ниже:

Names<-c("Max","Helen","Bob","Eva")
Id<-c(1,2,3,4)
LISTN<-data.frame(Names,Id)

Name1<-c("Max","Bob")
Name2<-c("Helen","Eva")
PAIRS<-data.frame(Name1,Name2)

Я хотел бы заменить значения столбцов Name1 и Name2 PAIRS соответствующими Id, найденными вLISTN.Результат должен выглядеть примерно так:

Name1 Name2
1     1     2
2     3     4

Ответы [ 2 ]

0 голосов
/ 16 января 2019

С tidyverse вы можете сделать:

PAIRS %>%
 rowid_to_column() %>%
 gather(var, val, -rowid) %>%
 left_join(LISTN, by = c("val" = "Names")) %>%
 select(-val) %>%
 spread(var, Id) %>%
 select(-rowid)

  Name1 Name2
1     1     2
2     3     4

Это преобразование PAIRS df из широкоформатного формата в длинный, объединение его с LISTN df по именам и последующее преобразование его обратно в широкоформатный формат со значениями из "Id".

0 голосов
/ 16 января 2019

Я могу придумать два пути, используя match, функцию, предназначенную для преобразования упорядоченных значений в позиции индексации:

> sapply(PAIRS, match, LISTN$Names)  # returns matrix
     Name1 Name2
[1,]     1     2
[2,]     3     4

> as.data.frame(lapply(PAIRS, match, LISTN$Names)) # returns dataframe
  Name1 Name2
1     1     2
2     3     4

Если имена не были упорядочены последовательно, вам необходимо сначала указать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...