如何将总和添加到表中并获取 R 中每个单元格的比例

Posted

技术标签:

【中文标题】如何将总和添加到表中并获取 R 中每个单元格的比例【英文标题】:How to add the total sums to the table and get proportion for each cell in R 【发布时间】:2012-10-19 09:22:36 【问题描述】:

我试图通过将每一行除以行总和来获得每个单元格的比例,但 R 给我一个错误说,

data.table$Country 中的错误:$ 运算符对原子向量无效

我该如何解决这个问题?另外,如何将整个列和行的总和值添加到 data.table?当我运行addmargins(data.table) 时,我得到了这个值,但我想将总和附加到我的数据框。


这是我的代码:

x = c(40,50,30,30,50)                
y = c(40,20,30,40,45)                              
data.table = rbind(x,y)   
data.table
dimnames(data.table)=list("Country"=c("England","Germany"),"Score"=c("Q-Score","T-score","X-score","Y-score","Z-score"))
addmargins(data.table)
table(data.table$Country,data.table$Score/rowSums(table(data.table&Country,data.table$Score)))

【问题讨论】:

您的代码中没有任何地方创建 data.frame。 【参考方案1】:

调用table 的输出是类table 的对象。这基本上是一个array。您不能使用$ 来引用数组或原子向量。 (因此出现错误)。

如果您想将addmargins(data.table) 的结果分配给一个对象,那么您完全可以这样做

margin_table <- addmargins(data.table)

看起来你想创建一个相对比例的表格。

prop.table 对此很有用。

 prop.table(margin_table)

         Score
Country      Q-Score    T-score X-score    Y-score    Z-score       Sum
  England 0.02666667 0.03333333    0.02 0.02000000 0.03333333 0.1333333
  Germany 0.02666667 0.01333333    0.02 0.02666667 0.03000000 0.1166667
  Sum     0.05333333 0.04666667    0.04 0.04666667 0.06333333 0.2500000

您还可以在原始文件上运行 prop.table 以获得行比例(1 = 行,2 = 列)

 prop.table(data.table, margins = 1)
      Score
Country     Q-Score   T-score   X-score   Y-score   Z-score
  England 0.2000000 0.2500000 0.1500000 0.1500000 0.2500000
  Germany 0.2285714 0.1142857 0.1714286 0.2285714 0.2571429

table 的帮助文件(由?tablehelp('table') 访问是详细的,并包含指向prop.tableaddmargins 的帮助文件的链接!

【讨论】:

感谢您在添加边距方面的帮助!实际上我并没有试图获得相对比例。我正在尝试将英格兰的行除以它的行和,并将德国的行除以其行和。你能告诉我如何使用这张桌子来做到这一点吗?还是我应该制作不同的数据? 查看我的编辑。阅读帮助文件!如果您正在做的事情是标准的事情,那么几乎可以肯定的是,它的包中会有一个函数。

以上是关于如何将总和添加到表中并获取 R 中每个单元格的比例的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将视图添加到表视图中的单元格

如何计算特定单元格的总和?

在excel中将数据从外部csv附加到表中

尝试仅将某些实体加载到表视图中

矩阵乘法中每个单元格的平均值,而不仅仅是 python 中的总和

OpenOffice Calc 中的列加空白单元格的总和