我有调查数据 - 称之为survey
- 一组人回答问题。我有每个人的姓名,他们回答的问题以及他们的回答,都是长篇大论(每个人的姓名重复几十次,每个问题一次)。
员工姓名|问题|答案
在第二个数据框中 - 称之为metaData
- ,我有一些问题的附加数据
员工姓名|问题|问题评估|问题研究计划|等。
两个数据集共享员工姓名和问题列,这些列应完全匹配。
我需要merge()
这两个数据框,但是Employee Name和Question都不足以合并。当您结合问题和员工姓名时,这是一个唯一的ID。在伪代码中,merge(survey, metaData, where(employeeSurvey == employeeMeta && questionSurvey == questionMeta)
。
例如,仅仅合并员工姓名会返回数百个匹配项,但应该只有一个员工姓名和问题相等的位置。
如何基于这两个条件进行合并?
答案 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)
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。