4

私は R で 2 週間の経験があり、あなたの助けに感謝します。

count() で構築されたデータ テーブルがあり、カテゴリごとに度数の割合を計算したいと考えています。これが私のデータフレームの場合:

name cat1 cat2 freq
A       1   1   32
A       1   0   56
A       0   1   36
A       0   0   25
B       1   1   14
B       1   0   68
B       0   1   58
B       0   0   90

名前とcat1(cat2 = 1,0が合計)でパーセンテージを計算したい。私はいくつかのデータフレームを持っています.名前のいくつかはcat1 = 0とcat2 = 0だけである可能性があり、構造が異なるため簡単にはできません.

たとえば、最初の行は (32/(32+56))*100、4 行目は (25/(25+36))*100 になります。

何か案は?

ありがとう

4

1 に答える 1

13

data.table を使用してみてください。大きなテーブルで作業する場合は、速度の利点も得られます。

library(data.table)
#if your data is already stored as a data frame, 
#you can always skip the next step and continue with data <- data.table(data)

data <- data.table(name=rep(c("A","B"), each=4), cat1=c(1,1,0,0,1,1,0,0), cat2=c(1,0,1,0,1,0,1,0), freq=c(32,56,36,25,14,68,58,90))
data[, percen := sum(freq), by=list(name,cat1)]
data[, percen := freq/percen]
data
> data
   name cat1 cat2 freq  percen
1:    A    1    1   32 0.3636364
2:    A    1    0   56 0.6363636
3:    A    0    1   36 0.5901639
4:    A    0    0   25 0.4098361
5:    B    1    1   14 0.1707317
6:    B    1    0   68 0.8292683
7:    B    0    1   58 0.3918919
8:    B    0    0   90 0.6081081

お役に立てれば。

于 2013-08-27T14:56:51.407 に答える