我是R的全新手,我需要一些我无法找到的东西。我想我不知道如何谷歌,所以让我解释一下我的问题。让我们假设我有一个像这样的数据帧。
criteria1 criteria2 data1 data2 data3
1 1 foo 2 1 3
2 1 foo 3 2 1
3 1 bar 2 1 3
4 2 foo 5 2 7
5 2 bar 8 2 3
6 1 bar 3 6 9
7 2 bar 2 5 6
8 3 xyz 2 5 6
我想计算data1,data2和data3的平均值,按criteria1和criteria2分组并维护数据框结构(列名)。结果应该是这样的:
criteria1 criteria2 data1 data2 data3
1 1 foo 2.5 1.5 2
2 1 bar 2.5 3.5 6
3 2 foo 5 2 7
4 2 bar 5 3.5 4.5
5 3 xyz 2 5 6
所以,我想知道如何在R中编码。谢谢。
答案 0 :(得分:4)
这是一个选项:
library(dplyr)
df %>%
group_by(criteria1, criteria2) %>%
summarise_each(funs(mean))
#Source: local data frame [5 x 5]
#Groups: criteria1
#
# criteria1 criteria2 data1 data2 data3
#1 1 bar 2.5 3.5 6.0
#2 1 foo 2.5 1.5 2.0
#3 2 bar 5.0 3.5 4.5
#4 2 foo 5.0 2.0 7.0
#5 3 xyz 2.0 5.0 6.0
或者
aggregate(cbind(data1, data2, data3) ~ criteria1 + criteria2, data = df, mean)
# criteria1 criteria2 data1 data2 data3
#1 1 bar 2.5 3.5 6.0
#2 2 bar 5.0 3.5 4.5
#3 1 foo 2.5 1.5 2.0
#4 2 foo 5.0 2.0 7.0
#5 3 xyz 2.0 5.0 6.0
答案 1 :(得分:3)
或使用聚合:
aggregate(df[ , 3:5], by = list(criteria1 = df$criteria1, criteria2 = df$criteria2), mean)
答案 2 :(得分:3)
data.table
解决方案。
require(data.table)
n <- 8
dt <- data.table(criteria1 = sample(3, n, replace = T),
criteria2 = sample(c("foo", "bar", "xyz"), n, replace = T),
data1 = sample(9, n, replace = T),
data2 = sample(9, n, replace = T),
data3 = sample(9, n, replace = T))
dt[, lapply(.SD, mean), keyby = list(criteria1, criteria2)]