5

Rの関数について質問がありtable()ます。追加の列を追加して、 によって作成されたカウントのパーセンテージを表示したいと考えていtable()ます。次のようなデータフレームがあります。

delta=data.frame(x1=c("x001","x001","x002","x002","x001","x001","x002"),x2=c(1,2,1,1,1,1,1))

table()このデータ フレームを計算すると、次のようになりました。

table(delta$x1,delta$x2)

       1 2
  x001 3 1
  x002 3 0

この表にパーセンテージを追加するか、R に次のような計算を行う関数またはパッケージがあります。

       1 2  Number Percentage
  x001 3 1    4     0.5714286
  x002 3 0    3     0.4285714

ご協力いただきありがとうございます。

4

3 に答える 3

5

あなたが使用することができprop.tableますaddmargins

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

編集

もちろん、次のようなこともできます

rowSums(prop.table(tbl)) 
     x001      x002 
0.5714286 0.4285714 

しかし、私の答えは、table関数を完成させる組み込み関数が R にあるということです。

于 2013-04-07T19:32:33.107 に答える
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

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
于 2013-04-07T19:22:17.627 に答える
2

計算はそれほど難しいものではありません。
つまずく可能性があるのは、そのテーブルが直接 data.frame に変換されないことです。少なくとも、あなたが望む方法ではありません。ここでは、ステップバイステップの内訳です。

# this is the basic table, we want it as a data.frame
delCounts <- table(delta)

# you need to convert the table to a matrix, before converting to a data.frame
results <- data.frame(matrix(delCounts, nrow=nrow(delCounts)))

# you may want to preserve the names.  Have a look: 
dimnames(delCounts)  # first are the column names, then row names

colnames(results) <- dimnames(delCounts)[[1]]
rownames(results) <- dimnames(delCounts)[[2]]

# Now sum up and take percentages
# we can use vectorized arithmetic operations for the percentage
results$Number <- rowSums(results)
results$Percentage <- results$Number / sum(results$Number)

# we might want to round instead
results$Percentage <- round(results$Number / sum(results$Number)*100, 2)

results
#   x001 x002 Number Percentage
# 1    3    1      4      57.14
# 2    3    0      3      42.86
于 2013-04-07T19:14:16.207 に答える