2

我有一些简单的命令来查看变量的总数、平均值和最大值,而另一个变量是赋值:

sum(data[data$var1==1,]$var2)
mean(data[data$var1==1,]$var2)
max(data[data$var1==1,]$var2)

有没有办法把它放到一个漂亮的表格中,这并不意味着我的输出是分散的?理想情况下,为了使其更加复杂,可以围绕 var1 的不同值(在我的情况下为 1 到 5)构建表格,这样我就可以获得 var1 的每个值的 var 2 的平均值、最大值和总数。

这可能略高于我现在使用 R 的位置:我是一个纯粹的新手。不过,一些帮助将不胜感激。谢谢

4

3 回答 3

4

查看表格包,通读包的小插图,显示如何完全按照您的要求进行操作。

> tabular( ( factor(cyl) + 1) ~ mpg * (sum + mean + max), data=mtcars )

             mpg             
 factor(cyl) sum   mean  max 
 4           293.3 26.66 33.9
 6           138.2 19.74 21.4
 8           211.4 15.10 19.2
 All         642.9 20.09 33.9
于 2013-09-01T04:12:28.770 回答
2

我建议检查一下这个data.table包,它就像一个增强版的数据框。它做得很好的一件事(如果你有很多数据,很快)就是这样的总结。

library(data.table)
as.data.table(mtcars)[, list(sum=sum(mpg), mean=mean(mpg), max=max(mpg)),
                      by=cyl][order(cyl)]
#   cyl   sum     mean  max
#1:   4 293.3 26.66364 33.9
#2:   6 138.2 19.74286 21.4
#3:   8 211.4 15.10000 19.2

如果您想通过多个变量进行汇总,只需使用类似by=list(cyl,vs,otherColumnNamesHere).

于 2013-09-01T23:02:48.173 回答
1

你需要使用cbind它。

cbind(sum(data[data$var1==1,]$var2),mean(data[data$var1==1,]$var2),max(data[data$var1==1,]$var2))

使用 mtcars 数据的示例

mydata<-mtcars  
  l<-cbind(sum(mydata[mydata$cyl==4,]$mpg),mean(mydata[mydata$cyl==4,]$mpg),max(mydata[mydata$cyl==4,]$mpg))
l<-data.frame(l)
names(l)<-c("sum","mean","max")
> l
    sum     mean  max
1 293.3 26.66364 33.9

plyr 包中有一个ddply函数可以为 var1 的每个类别执行所有操作(此处为 cyl)

library(plyr)
ddply(mydata,.(cyl),summarize, sum=sum(mpg),mean=mean(mpg), max=max(mpg))

 ddply(mydata,.(cyl),summarize, sum=sum(mpg),mean=mean(mpg), max=max(mpg))
  cyl   sum     mean  max
1   4 293.3 26.66364 33.9
2   6 138.2 19.74286 21.4
3   8 211.4 15.10000 19.2
于 2013-08-31T22:31:05.533 回答