2012-08-03 2 views
0

Скажем, у меня есть две колонки x = c("a", "c", "g") и y = c("a", "b", "c", "d", "e", "f", "g").Умный способ сопоставления элементов в одном кадре данных с элементами в другом кадре данных?

x - это столбец в dataframe1, а y - столбец в dataframe 2. dataframe1 не обязательно соответствует размеру данных 2 в размерности.

Я хочу вернуть строку y, содержащую x. Так, например, я хотел бы получить 1, 3, 7.

Я пробовал что-то неуклюжие, как items = which(dataframe1$x == dataframe2$y), но, очевидно, это не работает. Я знаю, что могу сделать цикл через dataframe1$x и сопоставить его с dataframe2$y, но похоже, должно быть гораздо лучшее решение.

ответ

0

У вас был подходящий инструмент. Вы просто не использовали его правильно. == будет соответствовать одному значению. Если вы хотите совместить один вектор с другим, используйте либо match, либо which с %in%не с ==).

Пример:

df1 <- data.frame(x = c("a", "c", "g")) 
df2 <- data.frame(y = letters[1:7]) 
match(df1$x, df2$y) 
# [1] 1 3 7 
which(df2$y %in% df1$x) 
# [1] 1 3 7 
Смежные вопросы