组R中的组上的函数

时间:2016-11-01 00:23:11

标签: r

假设我的数据框df包含三列:revenue(int),quarter(4级因子)和product(3级因子) )。

df <- data.frame(
     revenue = sample(500:5000, 10, replace=TRUE),
     quarter = sample(c("q1", "q2", "q3", "q4"), 50, replace = TRUE),
     product = sample(c("book", "movie", "tv"), 50, replace = TRUE))

使用tapply按季度或产品分组并在收入上执行各种功能非常容易,例如:

quarterly_revenue <- tapply(df$revenue, df$quarter, sum)

这给了我每季度的收入总和。

然而,这是我的问题:如果我想要更细化,即:每个产品每季度的收入总和怎么办?我已经尝试了split函数来创建数据框列表并使用各种plyr解决方案,但没有一个能给我输出我正在寻找的输出。我知道我可以基于每个因素进行子集,但这似乎效率低下,特别是当我正在使用的实际集合具有更多因子级别时。

任何想法?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

我们将分组列放在list中,然后获取sum

tapply(df$revenue, list(df$quarter, df$product),  sum)

使用aggregate

会更容易
aggregate(revenue~., df, sum)

dplyrdata.table

library(dplyr)
df %>% 
    group_by(quarter, product) %>%
    summarise(Sum = sum(revenue))

答案 1 :(得分:0)

您可以将data.tableby参数一起使用:

library( data.table )
setDT( df )[ , quarterly_revenue := sum( revenue ), 
               by = .( quarter, product ) ] 

或者,总结(而不仅仅是添加一列):

library( data.table )
library( magrittr )

setDT( df )[ , sum( revenue ), 
               by = .( quarter, product ) ] %>%
    setnames( c( "quarter", "product", "quarterly_revenue" ) )