比较列名和制作新表

时间:2013-05-13 19:05:06

标签: r match

我想比较两个数据框中的两个列名,并使用原始数据框中匹配的列名创建一个新表。

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'等)匹配时,我想创建一个新的数据帧,添加一个+ 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)'。但它只有在两个数据帧中两个列名的顺序相同时才有效。

先谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

我能想到的更简单的方法是

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

是你在寻找什么?

欢呼声