dcast保留四个值变量和两个因子

时间:2014-12-26 17:33:30

标签: r casting reshape

我在R中以长格式有一个 data.frame ,我想将它转换为宽广。
它包含来自多个客户的月度数据,我希望最终 data.frame 的每个客户端的平均值为hevoep和{{ 1}}。
应为每个客户修复festore 我认为pr包中的dcast应该可以完成这项工作,但我无法使其发挥作用。

reshape2

2 个答案:

答案 0 :(得分:3)

如果您需要客户的年度平均值(不清楚),dplyr可以这样做:

library(dplyr)

dat <- read.table(text="month   store   client  he  vo  ep  fe  pr
jan 1   54010   12  392 1   7   Basic
jan 2   54011   12  376 2   2   Premium
jan 1   54012   11  385 2   6   Basic
feb 1   54010   10  394 3   7   Basic
feb 2   54011   10  385 1   1   Premium
feb 1   54012   11  395 1   1   Basic
mar 1   54010   11  416 2   2   Basic
mar 2   54011   11  417 3   4   Premium
mar 1   54012   11  390 0   2   Basic
apr 1   54010   11  389 2   NA  Basic
apr 2   54011   7   398 6   3   Premium
apr 1   54012   11  368 1   3   Basic", stringsAs=F, header=T)

mt <- function(x, ...) { mean(x, na.rm=TRUE) }

dat %>%
  group_by(client) %>%
  summarise_each(funs(mt), -store, -pr, -month)

## Source: local data frame [3 x 5]
## 
##   client he     vo ep       fe
## 1  54010 11 397.75  2 5.333333
## 2  54011 10 394.00  3 2.500000
## 3  54012 11 384.50  1 3.000000

答案 1 :(得分:3)

以下是使用来自@ hrbrmstr答案的dat数据的数据表解决方案:

library(data.table)
## coerce to data table
DT <- as.data.table(dat)
## run mean() on columns 4 through 7, grouped by 'client'
DT[, lapply(.SD, mean, na.rm = TRUE), .SDcols = 4:7, by = client]
#    client he     vo ep       fe
# 1:  54010 11 397.75  2 5.333333
# 2:  54011 10 394.00  3 2.500000
# 3:  54012 11 384.50  1 3.000000