R:基于满足的两个连接条件合并两个数据帧

时间:2017-06-27 18:25:56

标签: r merge transformation

我有调查数据 - 称之为survey - 一组人回答问题。我有每个人的姓名,他们回答的问题以及他们的回答,都是长篇大论(每个人的姓名重复几十次,每个问题一次)。

员工姓名|问题|答案

在第二个数据框中 - 称之为metaData - ,我有一些问题的附加数据

员工姓名|问题|问题评估|问题研究计划|等。

两个数据集共享员工姓名和问题列,这些列应完全匹配。

我需要merge()这两个数据框,但是Employee Name和Question都不足以合并。当您结合问题和员工姓名时,这是一个唯一的ID。在伪代码中,merge(survey, metaData, where(employeeSurvey == employeeMeta && questionSurvey == questionMeta)

例如,仅仅合并员工姓名会返回数百个匹配项,但应该只有一个员工姓名和问题相等的位置。

如何基于这两个条件进行合并?

2 个答案:

答案 0 :(得分:1)

你应该可以将它们放在像

这样的矢量中
survey<-data.frame(name=c("John","John","Jane","Jane"), question=c(1,2,1,2),answer=c("Yes","Yes","Yes", "No"),stringsAsFactors = F)

metaData<-data.frame(first=c("John","John","Jane","Jane"), quest=c(1,2,1,2), age=c("20","20","40", "40"), stringsAsFactors = F)

merge(survey,metaData, by.x=c('name','question'), by.y=c('first','quest'))

  name question answer age
1 Jane        1    Yes  40
2 Jane        2     No  40
3 John        1    Yes  20
4 John        2    Yes  20

答案 1 :(得分:0)

与dplyr包合并

survey<-data.frame(name=c("John","John","Jane","Jane"), question=c(1,2,1,2),answer=c("Yes","Yes","Yes", "No"),stringsAsFactors = F)

metaData<-data.frame(first=c("John","John","Jane","Jane"), quest=c(1,2,1,2), age=c("20","20","40", "40"), stringsAsFactors = F)

library(dplyr)
left_join(survey, metaData, by = c(name = "first", question = "quest"))

# or using the pipe
survey %>% 
   left_join(metaData, by = c(name = "first", question = "quest"))

你还有两个表的其他动词,具有相同的sql逻辑:inner_join,right_join和full_join。