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



我有调查数据 - 称其为 survey-一组人对问题做出了回答。我有每个人的名字,他们回答的问题以及他们的回答,全部以很长的形式(每个人的名字都重复了数十次,每个问题一次(。

员工名称|问题|答案

在第二个数据框架中 - 称其为 metaData-,我还有有关问题的子集的其他数据

员工名称|问题|问题评估|问题的研究计划|等

两个数据集共享员工名称和问题列,它们应该完全匹配。

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

例如,仅在员工名称上合并会返回数百场比赛,但是只有一场雇员的名称和问题是相等的。

如何根据这两个条件合并?

您应该能够将它们扔到

的向量中
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

与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逻辑:innit_join,right_join和full_join。

最新更新