Объединение наборов данных различной длины в R путем сопоставления значений в столбцах? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть два набора данных.Один выглядит примерно так:

df <- data.frame(Book=c(1,1,1,2,2,2,3,3,3), 
                 Character=c('Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda'),
                 Target=c('Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally'),
                 Word=c('time', 'good', 'like', 'time', 'good', 'like', 'time', 'good', 'like'),
                 Total=c(1,2,4,2,4,3,2,4,4))

А другой выглядит примерно так:

df2 <- data.frame(Character=c('Sally', 'Jessie', 'Linda'),
                 Word=c('time', 'good', 'like'),
                 AllTotal=c(5,10,11))

Я пытаюсь объединить наборы, сохраняя те же размеры, что и df +1 новый столбец (AllTotal).Например, я хочу показать, что Салли произнесла слово «время» Джесси 1 раз в Книге 1 из 5 раз по всему набору данных.Конечный макет таблицы будет выглядеть примерно так:

df3 <- data.frame(Book=c(1,1,1,2,2,2,3,3,3), 
                 Character=c('Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda', 'Sally', 'Jessie', 'Linda'),
                 Target=c('Jessie', 'Sally', 'Jessie', 'Jessie', 'Sally', 'Sally', 'Jessie', 'Linda', 'Sally'),
                 Word=c('time', 'good', 'like', 'time', 'good', 'like', 'time', 'good', 'like'),
                 Total=c(1,2,4,2,4,3,2,4,4),
                 AllTotal=c(5,10,11,5,10,11,5,10,11))

Мне нужен какой-нибудь код слияния или сопоставления, такой, чтобы всякий раз, когда слово из df2 совпадало с словом из слова, в нем создавался новый столбец.df (AllTotal), который помещает соответствующее значение AllTotal из df2.

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

Я новичокк R и кодированию, и поэтому я не знаю всех правильных терминов.Я надеюсь, что то, что я спрашиваю, имеет смысл из приведенных мной примеров.Я пробовал разные версии слияния, inner_join и циклов for, и не могу получить правильный ответ.Поскольку я не знаю, как правильно обозначить то, что я пытаюсь сделать, мои поиски оказались бесполезными.

Заранее спасибо за вашу помощь!

1 Ответ

0 голосов
/ 22 февраля 2019

Как отмечает @thelatemail в своем комментарии, внутреннее объединение Character и Word, похоже, решает ваш основной вопрос:

result <- merge(df,df2,by=c("Character","Word"))

Вы можете переупорядочить столбец на основе значения в столбце Book, используя:

result <- result[order(result$Book),c(3,1,4,2,5,6)]

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