使用plyr计算边距

时间:2013-01-09 17:00:32

标签: r plyr

我有一个类似以下结构的数据框:

Trial Index    Condition1    Condition2    Measures
1              A             Y             ...
2              A             Y             ...        
3              B             Y             ...
4              B             Y             ...
5              A             Z             ...
6              A             Z             ...        
7              B             Z             ...
8              B             Z             ...

我想针对边距计算条件1和条件2的每个组合的一些汇总度量,。我可以使用ddply多次调用来做到这一点,但我想知道是否有一些简单的方法可以从中获取单个数据结构,例如:

Condition1    Condition2    Mean    Median    ....
A             Y             ...     ...       ....
A             Z             ...     ...       ....
A             -             ...     ...       ....             
B             Y             ...     ...       ....
B             Z             ...     ...       ....
B             -             ...     ...       ....
-             Y             ...     ...       ....
-             Z             ...     ...       ....

2 个答案:

答案 0 :(得分:3)

多年来,有关R报告“报告”的困难已经发出投诉。实际上没有用于在表格中插入小计(或子手段)和总计的内置函数。 SQL驱动程序的接口可以提供一些补救措施,但我不会这么简单,因为你没有使用数据库概念提出你的问题,我猜这对你不好。这是一种全基R方法,使用总和作为先前答案的结果:

R: calculating column sums & row sums as an aggregation from a dataframe

如果您使用边距构建数组,然后使用ftable将其“展平”,则可能会有进展的途径。见这里:

Grouping and Sorting in R

Duncan Murdoch有tables套餐。这可能是我能找到答案的最接近的。但我认为具体问题的答案是“有一些简单的方法”来获得具有所要求的复杂性的R对象是......不......至少我知道的是什么。

答案 1 :(得分:3)

@DWin是对的,tables包可能是正确的线索。这里不用考虑格式就是一个例子:

library(tables)
d1 <- data.frame(id = 1:10, c1 = sample(c("a","b"), 10, replace = TRUE), 
        c2 = sample(c("c", "d"), 10, replace = TRUE), measures = rnorm(1:10))
t1 <- tabular((c1 + c2 + c1*c2 +1) ~ (measures)*(mean + median), data = d1)

             measures        
             mean     median 
      c1 a   -0.33306 -0.1801
         b   -0.54121 -0.6381
      c2 c   -0.04862  0.1647
         d   -0.69615 -0.8129
 c1 a c2 c   -0.26195 -0.2619
         d   -0.38047 -0.1801
    b    c    0.16472  0.1647
         d   -1.01182 -1.1863
         All -0.43713 -0.4678

虽然需要一段时间才能进入语法;在正面,它提供了将表导出到LaTeX的功能。如果您不想/需要tabular对象中的所有标签,则可以通过as.matrix(t1, format = as.numeric)提取值。

注意:公式左侧的 c1c2必须为factor才能生效