我有一个示例data.frame,如下所示,我想创建另一个data.frame,其中包含某个列的某个列的统计信息,我该怎么做?
例如,在下面的data.frame中,我想通过Chart获取每列的总和。
示例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)]
提前致谢
答案 0 :(得分:6)
我将提倡使用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")
然后简单地说:
summed.data<-data[,lapply(.SD,sum),by=Chart]
查找data.table包,读取晕影和常见问题 - 使用它:)
答案 1 :(得分:3)
您可以考虑dplyr
。假设df
是您的数据框,以下内容将产生所需的结果。
library(dplyr)
df %.% group_by(Chart) %.%
summarise(Sum=sum(Sum),
Sum_Squares = sum(Sum_Squares),
Count= sum(Count),
Average= sum(Average))
或者它也可以像data.table
那样布局:
dt = as.data.table(df)
dt[, list(Sum=sum(Sum),
Sum_Squares = sum(Sum_Squares),
Count= sum(Count),
Average= sum(Average)),
by=Chart]
答案 2 :(得分:2)
在基地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