2013-05-13 55 views
2

我想比較兩個數據框中的兩個列名,並使用原始數據框中匹配的列名創建一個新表。比較列名並創建新表

a<-data.frame(a1=c(1,2,3,4,5),a2=c(2,3,4,5,6),b1=c(3,4,5,6,7),c1=c(4,5,6,7,8)) 
b<-data.frame(c1=c(10,20,30,40,50),b1=c(20,30,40,50,60),d1=c(30,40,50,60,70)) 

我想創建一個新的數據框,當列名稱(例如'c1'等)匹配時添加a + b。例如。我的新數據幀'c'現在將基於上述數據: c = data.frame(c1 = c(10 + 4,20 + 5,30 + 6,40 + 7,50 + 8), b1 = c(20 + 3,30 + 4,40 + 5,50 + 6,60 + 7))

我原來的數據幀比上面的要大得多,所以我用'for(i in 1: 10)」。但是,只有當兩個數據框中的兩個列名都是相同的順序時它才起作用。

非常感謝您的幫助。

回答

4
as.data.frame(lapply(intersect(names(a), names(b)), 
       function(name) a[name] + b[name])) 
+1

這正是我所期待的。謝謝。 – Bhante 2013-05-13 20:10:14

+0

有什麼辦法可以繪製這些匹配的列名?我通過使用: lapply(intersect(names(a),names(b)),function(name)plot(a [name],b [name]))來替換添加圖 它給出錯誤: Error in stripchart.default(x1,...):無效繪圖方法 – Bhante 2013-05-13 20:17:57

+1

請提出一個新帖子以解決其他問題。 – 2013-05-13 20:19:46

1

我能想到的更簡單的方法是

c <- cbind(b[, which(colnames(b)%in% colnames(a))], 
    a[, which(colnames(a)%in% colnames(b))]) 

的是,你在找什麼?

歡呼

+0

它的確營造具有相同COLUMNNAMES的表。謝謝。 – Bhante 2013-05-13 20:09:57

相關問題