我在数据框中有4列
a <- data.frame(a=c(1,2,3,4), b=c(4,5,6,7), c=c(7,6,5,4), d=c(8,4,3,2))
我想平均前两列和最后两列,以获得一个数据框,其中两列具有相同的nrows,平均前两列,后两列
预期产出:
5 15
7 10
9 8
11 6
答案 0 :(得分:1)
重现你的输出(这是总和,而不是意思):
library(plyr)
ddply(a, .(), summarise, first=a+b, second=c+d)[,-1]
它产生:
first second
1 5 15
2 7 10
3 9 8
4 11 6
使data.frame
取平均值:
ddply(a, .(), summarise, first=(a+b)/2, second=(c+d)/2)[,-1]
输出是:
first second
1 2.5 7.5
2 3.5 5.0
3 4.5 4.0
4 5.5 3.0
如果您不知道列的名称代码可以像这样修改:
ddply(a, .(), summarise, first=a[,1]+a[,2], second=a[,3]+a[,4])[,-1]
您可以在此按顺序访问列。或者,您只需在names(a) <- letters[1:4]
之前运行ddply()
。
ddply
是非常灵活的函数,您可以将分组变量指定为第二个参数并获得分组结果。但如果案件与问题一样简单,您可以直接致电summarise
:
summarise(a, first=a+b, second=c+d) # if you know columns' names
summarise(a, first=a[,1]+a[,2], second=a[,3]+a[,4]) # if you don't know columns' names