R SummaryBy包分组

时间:2014-03-02 21:32:26

标签: r

拥有包含A B C D E

列的csv文件

创建了这样的fun1函数来汇总数据

fun1 <- function(x){c(len=length(x), min=min(x), max=max(x))}

当我对特定列进行总结时,它可以正常工作

summaryBy(A ~ B, data=data1, FUN=fun1 , keep.names=TRUE)

但是,如何在fun1添加额外功能,例如sum(C)(与x无关),并在summaryBy中使用它来获取groupBy的相关结果乙

例如,

A B C D E

1 2 3 4 5

1 2 4 5 7

1 3 5 7 8

需要按B分组(相对于A),因此将获得两组(2,3)。 但sum(c) will与A无关。

结果应该是

B len min max sum(c)

2  2   1   1   7

3  1   1   1   5

1 个答案:

答案 0 :(得分:1)

试试这个:

summaryBy(A + C ~ B, data = data1, FUN = c(length, min, max, sum))[c(-3, -5, -7, -8)]

,并提供:

  B A.length A.min A.max C.sum
1 2        2     1     1     7
2 3        1     1     1     5

summaryBy可能不适合该问题。使用sqldf可以这样写:

library(sqldf)
sqldf("select B, count(A) len, min(A) min, max(A) max, sum(C) sum from data1 group by B")

,并提供:

  B len min max sum
1 2   2   1   1   7
2 3   1   1   1   5

注意:在上面的例子中我们使用了

data1 <- structure(list(A = c(1L, 1L, 1L), B = c(2L, 2L, 3L), C = 3:5, 
    D = c(4L, 5L, 7L), E = c(5L, 7L, 8L)), .Names = c("A", "B", 
"C", "D", "E"), class = "data.frame", row.names = c(NA, -3L))