R:通过某一列获取data.frame组中的列之和
我有一个示例data.frame,如下所示,我想创建另一个data.frame,它包含该表的某一列的统计信息,我如何才能做到这一点 例如,在下面的data.frame中,我希望通过图表获得每列的总和 示例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
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