R语言 使用Xtabs()按组汇总多个变量

vuktfyat  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(174)

xtabs可以制作一个汇总表,与cbind结合对多个变量进行汇总,并按剩余变量进行分组:

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有3个以上的列)。
我试过了

xtabs(cbind(df[2:4])~., data=df)
xtabs(cbind(names(df[2:4]))~., data=df)
#Error in ... variable lengths differ
cwdobuhd

cwdobuhd1#

使用paste/sprintf创建公式对象

xtabs(as.formula(sprintf("cbind(%s)~.", toString(names(df)[-1]))), data = df)
  • 输出
publication_date Asym Auth Cert
        2015 Aug    3    5    7
        2015 Jul    8   12    3

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

llew8vvj

llew8vvj2#

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

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

相关问题