Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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:通过某一列获取data.frame组中的列之和_R_Dataframe_Data.table - Fatal编程技术网

R:通过某一列获取data.frame组中的列之和

R:通过某一列获取data.frame组中的列之和,r,dataframe,data.table,R,Dataframe,Data.table,我有一个示例data.frame,如下所示,我想创建另一个data.frame,它包含该表的某一列的统计信息,我如何才能做到这一点 例如,在下面的data.frame中,我希望通过图表获得每列的总和 示例data.frame: Chart Sum Sum_Squares Count Average Chart1 2 4 4 1 Chart1 3 9 3

我有一个示例data.frame,如下所示,我想创建另一个data.frame,它包含该表的某一列的统计信息,我如何才能做到这一点

例如,在下面的data.frame中,我希望通过图表获得每列的总和

示例data.frame:

Chart    Sum     Sum_Squares    Count     Average
Chart1   2           4            4         1
Chart1   3           9            3         1.5
Chart2   4           16           5         2
Chart2   5           25           2         2.5
期望输出:

Chart    Sum_sum      Sum_square_sum      Count_sum      Average_sum
Chart1      5              13                 7              2.5
Chart2      9              41                 7              4.5
我尝试了下面的代码,但返回表只包含Chart和V1。sum_stat是data.frame

  sum_stat = data.table(spc_point[,c("CHART", "SUM", "SUM_SQUARES", "COUNT", "AVERAGE")])[,c(SUM_SUM=sum(SUM), SUM_SQUARE_SUM=sum(SUM_SQUARES), COUNT_SUM=sum(COUNT), AVERAGE_SUM=sum(AVERAGE)),by=list(CHART)]

谢谢大家

我将提倡使用data.table。试试这个:

data<-data.table("Chart"=c("Chart1","Chart1","Chart2","Chart2"), "Sum"=c(2,3,4,5),"Sum_Squares"=c(4,9,16,25),"Count"=c(4,3,5,2),"Average"=c(1,1.5,2,2.5),key="Chart")

<代码>数据> p>您可以考虑<代码> dPLYR < /代码>。假设
df
是您的数据帧,下面将生成所需的结果

library(dplyr)
df %.% group_by(Chart) %.% 
    summarise(Sum=sum(Sum), 
              Sum_Squares = sum(Sum_Squares), 
              Count= sum(Count),
              Average= sum(Average))
或者它可以像
数据中的那样进行布局。表也可以是:

dt = as.data.table(df)
dt[, list(Sum=sum(Sum), 
          Sum_Squares = sum(Sum_Squares), 
          Count= sum(Count),
          Average= sum(Average)),
   by=Chart]
在R基中:

aggregate(df[,2:5],by=list(df$Chart),FUN=sum)
#   Group.1 Sum Sum_Squares Count Average
# 1  Chart1   5          13     7     2.5
# 2  Chart2   9          41     7     4.5
正如@AnandaMahto所指出的,
aggregate(…)
的公式语法更简单、更清晰

aggregate(. ~ Chart, df, sum)
#    Chart Sum Sum_Squares Count Average
# 1 Chart1   5          13     7     2.5
# 2 Chart2   9          41     7     4.5

@Henrik补充了我尝试过的内容。有关数据表的正确用法,请参阅我的答案。如果你有一个data.frame,比如说
DF
,你只需要
dft感谢所有的答案和建议^_^在
=1.9.0
版本中还有一个新的
setDT
函数,它允许通过引用将data.frames转换为data.tables:
setDT(X)[,lapply(.SD,sum),by=Chart]
<代码>X
将转换为数据。表
通过此处引用。哦,太好了!感谢您指出这一点,我们一定会记住:)+1,但公式语法在输入和输出方面都有点简洁:
aggregate(.~Chart,df,sum)
。我忘了在函数的左侧可以使用
。希望你不介意我把它添加到我的答案中。这并没有给出期望的结果。我想你想要的是
sum(Average)
。我将
mean(Average)
编辑为
sum(Average)
,并添加了长时间的data.table语法,这样你就可以进行比较了。由于应用的是相同的函数(现在更清楚了,因为它不是
mean(Average)
),
lapply(.SD,sum)
也可以使用,就像萨鲁纳斯的回答一样。顺便问一下,为什么我们要把平均数加起来?我认为对平均值进行(加权)平均更有意义。当然,但我们必须首先回答问题,这样答案才能正确。然后添加更多内容或评论,如您所做的那样,以进一步。
aggregate(. ~ Chart, df, sum)
#    Chart Sum Sum_Squares Count Average
# 1 Chart1   5          13     7     2.5
# 2 Chart2   9          41     7     4.5