R - 总结两个其他因子水平的每个组合的因子水平

时间:2016-01-11 17:33:54

标签: r dataframe

假设我有一个包含4列的数据框D1

  • F1包含因素[A, B]
  • F2包含因素[P, Q]
  • F3包含因素[X, Y]
  • F4包含数值

如何将其转换为新的三列圆柱数据D2

    和以前一样
  • F1F2
  • 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

理想情况下,无论调整因素的数量级别如何,这都应该起作用

2 个答案:

答案 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