2017-06-27 454 views
0

我有調查數據 - 稱之爲survey - 其中一組人回答了問題。我有每個人的名字,他們回答的問題,他們的回答,都是長的形式(每個人的名字重複幾十次,每個問題一次)。R:根據兩個連接條件合併兩個數據幀

員工姓名|問題|答

在第二個數據幀 - 稱之爲metaData - ,我對的問題

員工姓名的一個子集的額外數據|問題|問題評估|學習問題計劃|等等。

這兩個數據集共享Employee Name和Question列,它們應該完全匹配。

我需要merge()這兩個數據框,但是Employee Name和Question都不足以合併。當您將問題和員工姓名相結合時,這是一個唯一的ID。在僞代碼中,merge(survey, metaData, where(employeeSurvey == employeeMeta && questionSurvey == questionMeta)

只是合併員工姓名例如會返回數百個匹配,但應該只有一個員工姓名和問題都是平等的。

如何根據這兩個條件進行合併?

回答

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 
+0

這是暗示「兩者」而不是「或」? – Mako212

+0

是的。在這個例子中,我假設每個數據框中的字段名稱是不同的。 – alaybourn

+0

完美,謝謝! – Mako212

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。