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

时间:2012-10-30 03:24:51

标签: r margin contingency

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

  

data.table $ Country:$ operator对原子向量无效

我该如何解决这个问题?另外,如何将整个列和行的总和值添加到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)))

1 个答案:

答案 0 :(得分:12)

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的帮助文件的链接!