是否可以将百分比添加到列联表中

Duc*_*uck 4 r

我对table()R中的函数有疑问。我想添加一个额外的列,以显示的计数百分比table()。我有一个像这样的数据框:

delta=data.frame(x1=c("x001","x001","x002","x002","x001","x001","x002"),x2=c(1,2,1,1,1,1,1))
Run Code Online (Sandbox Code Playgroud)

当我table()为这个数据帧计算时,我得到了:

table(delta$x1,delta$x2)

       1 2
  x001 3 1
  x002 3 0
Run Code Online (Sandbox Code Playgroud)

可以在此表中添加百分比,或者R中有任何函数或程序包可以计算如下内容:

       1 2  Number Percentage
  x001 3 1    4     0.5714286
  x002 3 0    3     0.4285714
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

Jas*_*gan 5

sum()这是使用和 的快速解决方案rowSums()

> tbl <- table(delta)
> (tbl <- cbind(tbl, rowSums(tbl), rowSums(tbl) / sum(tbl)))

     1 2        
x001 3 1 4 0.571
x002 3 0 3 0.429
Run Code Online (Sandbox Code Playgroud)

您可以使用colnames();添加列名称 例如:

> colnames(tbl) <- c("1", "2", "N", "Pct")
> tbl
     1 2 N   Pct
x001 3 1 4 0.571
x002 3 0 3 0.429
Run Code Online (Sandbox Code Playgroud)


ags*_*udy 5

您可以使用prop.tableaddmargins

tbl <- table(delta$x1,delta$x2)

prop.table(tbl)

# 1         2
# x001 0.4285714 0.1428571 
# x002 0.4285714 0.0000000

addmargins(tbl)

# 1 2 Sum
# x001 3 1   4
# x002 3 0   3
# Sum  6 1   7
Run Code Online (Sandbox Code Playgroud)

编辑

当然你可以做类似的事情

rowSums(prop.table(tbl)) 
     x001      x002 
0.5714286 0.4285714 
Run Code Online (Sandbox Code Playgroud)

但是我的回答是说R中有一些内置函数可以完成该table功能。