R dcast保留四个值变量和两个因子
我在R中有一个长格式的data.frame,我想将其转换为宽格式。R dcast保留四个值变量和两个因子,r,casting,reshape,R,Casting,Reshape,我在R中有一个长格式的data.frame,我想将其转换为宽格式。 它有来自多个客户的每月数据,我希望最终的数据。frame有每个客户的平均值he,vo,ep和fe store和pr应针对每个客户进行固定。 我认为包中的dcast应该做这项工作,但我不能让它工作 month store client he vo ep fe pr jan 1 54010 12 392 1 7 Basic jan 2 54011 12 376 2 2 Premi
它有来自多个客户的每月数据,我希望最终的数据。frame有每个客户的平均值
he
,vo
,ep
和fe
store
和pr
应针对每个客户进行固定。我认为包中的
dcast
应该做这项工作,但我不能让它工作
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
如果您需要客户对这些列的年平均值(不清楚),
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
库(dplyr)
dat%
每个月总结(funs(mt),-商店,-公关,-月份)
##来源:本地数据帧[3 x 5]
##
##客户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
以下是一个数据表解决方案,使用@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
库(data.table)
##强制到数据表
DT你没有关于年份的任何信息,那么你想如何计算年平均值?或者您的所有数据都是一年内的数据,您只需要每个客户的平均值?仅供参考,使用基数R,您可以做:aggregate(cbind(he,vo,ep,fe)~client,dat,mean)
以获得与hrbrmstr答案相同的结果。