我在R中以长格式有一个 data.frame ,我想将它转换为宽广。
它包含来自多个客户的月度数据,我希望最终 data.frame 的每个客户端的平均值为he
,vo
,ep
和{{ 1}}。
应为每个客户修复fe
和store
我认为pr
包中的dcast
应该可以完成这项工作,但我无法使其发挥作用。
reshape2
答案 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