Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R dcast保留四个值变量和两个因子_R_Casting_Reshape - Fatal编程技术网

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

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

我在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   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答案相同的结果。