加上一句「;“总体”;使用data.table创建data.frame时忽略by=x的行
我正在创建data.frames,它使用data.table按不同时间段(星期几、一天中的时间等)汇总列 使用by=x,显然很容易得到(比如)每天的平均销售额。但是,我也希望第一行包含每种产品的总体销售平均值 例如:加上一句「;“总体”;使用data.table创建data.frame时忽略by=x的行,r,dataframe,data.table,R,Dataframe,Data.table,我正在创建data.frames,它使用data.table按不同时间段(星期几、一天中的时间等)汇总列 使用by=x,显然很容易得到(比如)每天的平均销售额。但是,我也希望第一行包含每种产品的总体销售平均值 例如: DayofWeek Sales Sunday -0.32632766 Sunday -1.39525094 Sunday -0.17669726 Sunday 0.85023421 Sunday 0.86486582
DayofWeek Sales
Sunday -0.32632766
Sunday -1.39525094
Sunday -0.17669726
Sunday 0.85023421
Sunday 0.86486582
Monday -0.09989301
Monday 0.76727639
Monday -1.67428010
Tuesday 0.07731930
Tuesday -0.49833578
Tuesday -1.30299674
Tuesday 0.15315193
(这是dput():
我能做到
mysample.dt<-as.data.table(sample)
mysales.day<-mysample.dt[,list(MeanSales=mean(Sales)),by=DayofWeek]
然后我可以不使用by=x来运行上面的计算,得到一个整体平均值,然后将这两个data.frames组合在一起
然而,在我最初的论点中有没有办法做到这一点
因此,输出为:
DayofWeek MeanSales
Overall 0.02642795
Sunday -0.03663517
Monday -0.33563224
Tuesday -0.39271532
Wednesday -0.26611608
Thursday -0.31129511
Friday -0.14137063
Saturday 1.27940885
无需分两步创建?我不确定这是否符合一步解决方案的要求
rbind(mysample.dt[, list(DayofWeek = "Overall", MeanSales = mean(Sales))],
mysample.dt[, list(MeanSales = mean(Sales)), by = DayofWeek])
我认为你不可能一步就做到这一点。哇,我想这可能是你第一次告诉我做不到的事情。:)这似乎是不可能的-我无法预见一种方法可以暂时忽略by=x,这就是必须发生的事情。你认为data.table是我最好的方法吗?当然,你可以把这两个步骤都封装在一个函数中,但是计算分组平均数和总体平均数需要不同的算法,这意味着你需要两个步骤。你现在可以使用如下方法:
restrape2::dcast(dt,DayofWeek~,value.var=“Sales”,margins=TRUE,fun=mean)
如果您绝对需要避免两个步骤。不过,在大数据方面,速度会很慢dcast.data.table
还没有margins
参数。完成后,速度会快得多。
DayofWeek MeanSales
Overall 0.02642795
Sunday -0.03663517
Monday -0.33563224
Tuesday -0.39271532
Wednesday -0.26611608
Thursday -0.31129511
Friday -0.14137063
Saturday 1.27940885
rbind(mysample.dt[, list(DayofWeek = "Overall", MeanSales = mean(Sales))],
mysample.dt[, list(MeanSales = mean(Sales)), by = DayofWeek])