我有一些简单的命令查看变量的总数,平均值和最大值,而另一个变量是指定的值:
sum(data[data$var1==1,]$var2)
mean(data[data$var1==1,]$var2)
max(data[data$var1==1,]$var2)
有没有办法把它放到一个漂亮的表中,这并不意味着我的输出是分散的行?为了使它更复杂,将围绕var1的不同值(在我的情况下为1到5)构建表,因此我可以为var1的每个值得到var 2的mean,max和total。
这可能有点高于我现在和R在一起的地方:我是一个纯粹的新手。不过会有一些帮助。 感谢
答案 0 :(得分: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
答案 1 :(得分: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)
之类的内容。
答案 2 :(得分: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