web-dev-qa-db-ja.com

累積頻度と相対頻度でRの頻度表を生成する方法

私はRを初めて使用します。累積頻度と相対頻度を使用して、単純な頻度表(書籍など)を生成する必要があります。

だから私は次のようないくつかの簡単なデータから生成したい

> x
[1] 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 12 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10
[36] 12 15 19 20 22 20 19 19 19

次のようなテーブル:

            frequency  cumulative   relative
(9.99,11.7]    2            2       0.04545455
(11.7,13.4]    2            4       0.04545455
(13.4,15.1]    1            5       0.02272727
(15.1,16.9]   10           15       0.22727273
(16.9,18.6]   22           37       0.50000000
(18.6,20.3]    6           43       0.13636364
(20.3,22]      1           44       0.02272727

私はそれが単純であるべきだと知っていますが、どのように私は知りません。

私はこのコードを使用していくつかの結果を得ました:

factorx <- factor(cut(x, breaks=nclass.Sturges(x)))
as.matrix(table(factorx))
27
eloyesp

近いよ!これを簡単にする関数がいくつかあります。つまり、cumsum()prop.table()です。おそらくこれをどのように組み合わせるかを以下に示します。ランダムデータをいくつか作成しますが、ポイントは同じです。

#Fake data
x <- sample(10:20, 44, TRUE)
#Your code
factorx <- factor(cut(x, breaks=nclass.Sturges(x)))
#Tabulate and turn into data.frame
xout <- as.data.frame(table(factorx))
#Add cumFreq and proportions
xout <- transform(xout, cumFreq = cumsum(Freq), relative = prop.table(Freq))
#-----
      factorx Freq cumFreq   relative
1 (9.99,11.4]   11      11 0.25000000
2 (11.4,12.9]    3      14 0.06818182
3 (12.9,14.3]   11      25 0.25000000
4 (14.3,15.7]    2      27 0.04545455
5 (15.7,17.1]    6      33 0.13636364
6 (17.1,18.6]    3      36 0.06818182
7   (18.6,20]    8      44 0.18181818
25
Chase

基本関数tablecumsumおよびprop.tableそこに着くはずです:

 cbind( Freq=table(x), Cumul=cumsum(table(x)), relative=prop.table(table(x)))
   Freq Cumul   relative
10    2     2 0.04545455
12    2     4 0.04545455
15    1     5 0.02272727
16   10    15 0.22727273
17   16    31 0.36363636
18    6    37 0.13636364
19    4    41 0.09090909
20    2    43 0.04545455
22    1    44 0.02272727

Cbindとお好みの列の名前付けにより、将来これは非常に簡単になります。表関数からの出力は行列であるため、この結果も行列です。これが何か大きなもので行われている場合、これを行うのがより効率的です:

tbl <- table(x)
cbind( Freq=tbl, Cumul=cumsum(tbl), relative=prop.table(tbl))
22
42-

事前にパッケージ化されたものを探している場合は、descrパッケージのfreq()関数を検討してください。

_library(descr)
x = c(sample(10:20, 44, TRUE))
freq(x, plot = FALSE)
_

または、累積パーセントを取得するには、ordered()関数を使用します

_freq(ordered(x), plot = FALSE)
_

「累積頻度」列を追加するには:

_tab = as.data.frame(freq(ordered(x), plot = FALSE))
CumFreq = cumsum(tab[-dim(tab)[1],]$Frequency)
tab$CumFreq = c(CumFreq, NA)
tab
_

データに欠損値がある場合、有効なパーセント列がテーブルに追加されます。

_x = c(sample(10:20, 44, TRUE), NA, NA)
freq(ordered(x), plot = FALSE)
_
12
Sandy Muspratt

さらに別の可能性:

 library(SciencesPo)
    x = c(sample(10:20, 50, TRUE))
    freq(x)
1
daniel