【问题标题】:How to summarize rows and columns in R?如何总结 R 中的行和列?
【发布时间】:2017-02-12 08:34:14
【问题描述】:

我有这种表:

           aaa     bbb   ccc 
  A         0       3     5    
  B         2       2     2    
  C         2       5     7

我使用anti_join(用于非数值表)和table 命令以更好的方式对结果进行分组(类似于 Excel 中的 countif)。

da1 <- anti_join(data1,data2, by=c("pam1","pam2"))
table(da1$pam1,da1$pam2)

我想知道是否可以添加每行和每列的总和,以便结果中会出现如下内容:

           aaa     bbb   ccc  SUM 
  A         0       3     5    8
  B         2       2     2    6
  C         2       5     7    14
 SUM        4      10     14

【问题讨论】:

  • 当然,它有效,有没有办法像示例一样布局结果?

标签: r summarization group-summaries


【解决方案1】:

我们可以试试rowSumscolSums

cbind(rbind(df, SUM = rowSums(df)), SUM = c(colSums(df), NA))

#     aaa bbb ccc SUM
#A     0   3   5   4
#B     2   2   2  10
#C     2   5   7  14
#SUM   8   6  14  NA

【讨论】:

  • 布局很完美,但如果我尝试将其应用到真实表格中,总和值不正确
  • @Ale 你那里有NA 的值吗?上述解决方案适用于提供的示例数据。您应该添加一个代表您的真实数据的示例。
  • 不,没有 NA,我的意思是它与上面的示例非常相似,但它给出了警告:结果的行数不是向量长度的倍数(arg 2)跨度>
【解决方案2】:

一个优雅的选择是addmargins

addmargins(as.matrix(df1))
#    aaa bbb ccc Sum
#A     0   3   5   8
#B     2   2   2   6
#C     2   5   7  14
#Sum   4  10  14  28

数据

df1 <- structure(list(aaa = c(0L, 2L, 2L), bbb = c(3L, 2L, 5L), ccc = c(5L, 
2L, 7L)), .Names = c("aaa", "bbb", "ccc"), class = "data.frame", row.names = c("A", 
"B", "C"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多