根据给定列中的公共值,在R中聚合相同data.frame的多行

msc*_*lli 12 aggregate r dataframe

我有一个data.frame看起来像这样:

# set example data
df <- read.table(textConnection("item\tsize\tweight\tvalue
A\t2\t3\t4
A\t2\t3\t6
B\t1\t2\t3
C\t3\t2\t1
B\t1\t2\t4
B\t1\t2\t2"), header = TRUE)

# print example data
df
Run Code Online (Sandbox Code Playgroud)
  item size weight value
1    A    2      3     4
2    A    2      3     6
3    B    1      2     3
4    C    3      2     1
5    B    1      2     4
6    B    1      2     2
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样size,weight并列不会增加任何复杂性,因为它们对于每个都是相同的item.但是,value同样可以有多个item.

我想将data.frame折叠为每次item使用均值一行value:

  item size weight value
1    A    2      3     5
3    B    1      2     3
4    C    3      2     1
Run Code Online (Sandbox Code Playgroud)

我想我必须使用该aggregate功能,但我无法弄清楚我究竟能得到上述结果.

Mar*_*ler 17

aggregate(value ~ item + size + weight, FUN = mean, data=df)

  item size weight value
1    B    1      2     3
2    C    3      2     1
3    A    2      3     5
Run Code Online (Sandbox Code Playgroud)


Met*_*ics 5

这是使用ddplyfrom plyr 包的解决方案:

library(plyr)
ddply(df,.(item),colwise(mean))
  item size weight value
1    A    2      3     5
2    B    1      2     3
3    C    3      2     1
Run Code Online (Sandbox Code Playgroud)