Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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
加上一句「;“总体”;使用data.table创建data.frame时忽略by=x的行_R_Dataframe_Data.table - Fatal编程技术网

加上一句「;“总体”;使用data.table创建data.frame时忽略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

我正在创建data.frames,它使用data.table按不同时间段(星期几、一天中的时间等)汇总列

使用by=x,显然很容易得到(比如)每天的平均销售额。但是,我也希望第一行包含每种产品的总体销售平均值

例如:

   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])