2016-12-14 3 views
-1

У меня есть этот код:Matching кадры данных

df1 <- data.frame(letter=c("a", "a", "a", "b", "b", "c", "d", "e"), 
       value=c(NA)) 
df2 <- data.frame(letter=c("a", "b", "g", "f", "d", "e", "a", "b", "a", "c"), 
       number=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) 

Я хочу, чтобы соответствовать этим два кадра данных с помощью письма и возвращает соответствующее число в df2 в столбце Значение в df1.

Так что результат для df1 будет выглядеть это так:

enter image description here

+1

'df2 [матч (df1 $ письмо, df2 $ письмо),] ' –

+0

Похоже, вы хотите присоединиться и по местоположению. Вы можете 'library (data.table); setDT (df1) [, indx: = rowid (letter)]; setDT (df2) [, indx: = rowid (letter)]; df1 [df2, value: = number, on =. (letter, indx)] '(не предопределять' value = c (NA) 'в' df1 'пожалуйста, он создает логический вектор вместо числового) –

+0

@PierreLafortune Это не то, что они хотят. –

ответ

-1

Посмотрите на пакет dplyr с присоединиться функциями:

library(dplyr) 
inner_join(df1, df2) %>% 
    distinct(letter, number) 
+1

Серьезно? Как насчет того, чтобы вы сначала посмотрели на желаемый результат –

+0

Это просто возвращает позицию, в которой буква в df1 появляется в df2. Я больше заинтересован в возвращении числа, связанного с каждым экземпляром этой буквы в df2. Например, для буквы «a» я хотел бы вернуть числа 1, 7, 9 – Dfeld

+0

Прошу прощения, но мое решение возвращает именно то, что нужно для вывода (хорошо, после этого я добавил отдельную функцию). Извините, если я не понимаю проблему ... – denrou