【问题标题】:sum/average different columns in dataframe R对数据框R中的不同列求和/平均
【发布时间】:2014-03-07 22:29:02
【问题描述】:

我在一个数据框中有 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

【问题讨论】:

标签: r


【解决方案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]

您可以在此处按顺序访问列。或者,您可以在 ddply() 之前运行 names(a) &lt;- letters[1:4]

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

【讨论】:

  • 谢谢,成功了。但我没有任何列名。我上面举了一个例子。我所知道的要添加前两列和最后两列。我将如何传递这些信息?
  • 只需在ddply 之前运行names(a) &lt;- letters[1:4] 即可分配名称
  • @redmionds, summarise(a, first=a[,1]+a[,2], second=a[,3]+a[,4]),抛出错误 -> " [, 1] 维数错误”
  • @user1631306,我认为这是因为data.frame a 有名为a 的列。
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多