簡體   English   中英

使用匯總來划分計數

[英]Using aggregate to divide counts

考慮以下數據集:

set.seed(144)
d=data.frame(x=round(runif(30)),y=sample(LETTERS[1:3],30,TRUE),z=sample(LETTERS[1:3],30,TRUE))

aggregate(x~y+z,d,table)

給我這樣的東西:

head(aggregate(x~y+z,d,table))
  y z    x
1 A A 3, 1
2 B A 2, 2
3 C A 2, 1
4 A B 2, 2
5 B B 1, 3
6 C B    2
7 A C 2, 2
8 B C 2, 1
9 C C 1, 1

雖然我在x列中需要的是計數的比率:

  y z         x
1 A A 3.0000000
2 B A 1.0000000
3 C A 2.0000000
4 A B 1.0000000
5 B B 0.3333333
6 C B 0.0000000
7 A C 1.0000000
8 B C 2.0000000
9 C C 1.0000000

您可以傳遞用戶定義的函數進行aggregate以計算比率:

# Setting seed to make a reproducible example
set.seed(144)
d=data.frame(x=round(runif(30)),y=sample(LETTERS[1:3],30,TRUE),z=sample(LETTERS[1:3],30,TRUE))
head(aggregate(x~y+z, d, function(x) sum(x == 0) / sum(x == 1)))
#   y z         x
# 1 A A 3.0000000
# 2 B A 1.0000000
# 3 C A 2.0000000
# 4 A B 1.0000000
# 5 B B 0.3333333
# 6 C B 0.0000000

y=='C' & z=='B'時, table沒有輸出值為0的輸出,因此為該行返回NA可能是合理的。 如果是這樣的話:

aggregate(x~y+z, d, function(x) {
                                   tb <- table(x)
                                   tb['0']/tb['1']
                                }
)
  y z         x
1 A A 3.0000000
2 B A 1.0000000
3 C A 2.0000000
4 A B 1.0000000
5 B B 0.3333333
6 C B        NA
7 A C 1.0000000
8 B C 2.0000000
9 C C 1.0000000

嘗試:

> d=data.frame(x=round(runif(30)),y=sample(LETTERS[1:3],30,TRUE),z=sample(LETTERS[1:3],30,TRUE))
> d
   x y z
1  0 B C
2  1 A C
3  0 C C
4  0 C A
5  0 C B
6  0 B C
7  1 A A
8  1 B C
9  1 B A
10 1 C C
11 1 A A
12 0 B C
13 0 B B
14 0 A A
15 1 C B
16 1 C A
17 1 B C
18 1 C C
19 1 C A
20 0 B A
21 0 B A
22 0 A C
23 1 C A
24 0 C A
25 1 C B
26 0 C C
27 1 C A
28 1 B A
29 1 C B
30 1 B A
> aa = aggregate(x~y+z,d,table)
> aa
  y z    x
1 A A 1, 2
2 B A 2, 3
3 C A 2, 4
4 B B    1
5 C B 1, 3
6 A C 1, 1
7 B C 3, 2
8 C C 2, 2
> bb =data.frame(aa$x)
> cc = bb[,seq(2,length(bb),2)]
> dd = cc[2,]/cc[1,]
> aa$out = t(dd)
> aa
  y z    x         2
1 A A 1, 2 2.0000000
2 B A 2, 3 1.5000000
3 C A 2, 4 2.0000000
4 B B    1 1.0000000
5 C B 1, 3 3.0000000
6 A C 1, 1 1.0000000
7 B C 3, 2 0.6666667
8 C C 2, 2 1.0000000
> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM