R: нахождение значений одного вектора в другом и соответствующих значений

#r #dataframe

#r #dataframe

Вопрос:

Если у меня есть data.frame (df1) следующим образом:

 Name  Count
a     1
b     2
c     3
  

и другой data.frame (df2), подобный:

 Name  Count
aa     0
ba     0
ca     0
b      0
a      0
c      0
  

Я хочу получить значения, соответствующие df1 в df2, где имена совпадают. В настоящее время я пытаюсь:

 idx = which(df2$Name %in% df1$Name)
df2[idx,2] = df1$Count
  

Кажется, что это меняет местами или переставляет некоторые из сохраненных значений. Каким будет метод, при котором порядок в исходном data.frame может быть сохранен?

Комментарии:

1. Попробуйте: df2[match(df1$Name, df2$Name),]$Count <- df1$Count

Ответ №1:

Вы можете получить индексы для замены, используя match :

 df2[match(df1$Name, df2$Name),]$Count <- df1$Count
  

Что касается того, почему ваше решение не работает, сравните вывод:

 which(df2$Name %in% df1$Name)
[1] 4 5 6
  

и

 match(df1$Name, df2$Name)
[1] 5 4 6