首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Xtabs()按组汇总多个变量

用Xtabs()按组汇总多个变量
EN

Stack Overflow用户
提问于 2022-11-29 19:19:57
回答 2查看 37关注 0票数 2

xtabs可以创建一个汇总表,并结合cbind对多个变量进行汇总,并按其余变量进行分组:

代码语言:javascript
复制
df<-data.frame(publication_date=c("2015 Jul","2015 Jul","2015 Aug","2015 Aug"),
               Asym=c(3,5,1,2),
               Auth=c(5,7,2,3),
               Cert=c(1,2,3,4))

xtabs(cbind(Auth, Asym, Cert)~., data=df)

#publication_date Auth Asym Cert
#        2015 Aug    5    3    7
#        2015 Jul   12    8    3

是否有一种方法可以编程地绑定除一个变量之外的所有变量,特别是不写出所有变量名(例如,如果df有多个列)。

我试过了

代码语言:javascript
复制
xtabs(cbind(df[2:4])~., data=df)
xtabs(cbind(names(df[2:4]))~., data=df)
#Error in ... variable lengths differ
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-29 19:29:52

使用paste/sprintf创建公式对象

代码语言:javascript
复制
xtabs(as.formula(sprintf("cbind(%s)~.", toString(names(df)[-1]))), data = df)

-output

代码语言:javascript
复制
publication_date Asym Auth Cert
        2015 Aug    3    5    7
        2015 Jul    8   12    3

或者正如@G. Grothendieck所提到的,只要一个字符串作为公式就足够了。

票数 2
EN

Stack Overflow用户

发布于 2022-11-29 19:55:49

我们可以使用lapply/tapply,然后设置酒窝名称。

代码语言:javascript
复制
tab <- do.call("cbind", lapply(df[-1], tapply, df[[1]], sum))
names(dimnames(tab)) <- c(names(df)[1], "")
class(tab) <- c("xtabs", "array") # optional

tab
## publication_date Asym Auth Cert
##         2015 Aug    3    5    7
##         2015 Jul    8   12    3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74619215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档