假设我有一个包含4列的数据框D1
:
F1
包含因素[A, B]
F2
包含因素[P, Q]
F3
包含因素[X, Y]
F4
包含数值如何将其转换为新的三列圆柱数据D2
:
F1
和F2
F3
包含所有[X, Y, Z]
级别平均值的平均值,并将其存储在新数据框中。我知道如何获得每个单因素水平的平均值,但我想对其他两个级别的叉积进行此操作。
示例 鉴于数据框:
F1 F2 F3 F4
A P X 2
A P Y 4
A Q X 3
A Q Y 5
B P X 1.5
B P Y 2.5
B Q X 0
B Q Y 1
以下数据框将被输出:
F1 F2 F3
A P 3
A Q 4
B P 2
B Q 0.5
理想情况下,无论调整因素的数量级别如何,这都应该起作用
答案 0 :(得分:2)
我们可以尝试
library(data.table)
setDT(df1)[, list(F3=mean(F4)) , .(F1, F2)]
# F1 F2 F3
#1: A P 3.0
#2: A Q 4.0
#3: B P 2.0
#4: B Q 0.5
library(dplyr)
df1 %>%
group_by(F1, F2) %>%
summarise(F3= mean(F4))
# F1 F2 F3
# (chr) (chr) (dbl)
#1 A P 3.0
#2 A Q 4.0
#3 B P 2.0
#4 B Q 0.5
aggregate(F4~F1+F2, df1, mean)
答案 1 :(得分:0)
库dplyr
的潜在解决方案是:
library(dplyr)
D1 <- data.frame(F1 = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
F2 = c('P', 'P', 'Q', 'Q', 'P', 'P', 'Q', 'Q'),
F3 = c('X', 'Y', 'X', 'Y', 'X', 'Y', 'X', 'Y'),
F4 = c(2, 4, 3, 5, 1.5, 2.5, 0, 1),
stringsAsFactors = FALSE)
D2 <- D1 %>% group_by(F1, F2) %>% summarise(F3 = mean(F4))
这将用平均值替换列F3。
输出如下:
D2
Source: local data frame [4 x 3]
Groups: F1 [?]
F1 F2 F3
(chr) (chr) (dbl)
1 A P 3.0
2 A Q 4.0
3 B P 2.0
4 B Q 0.5