如何在R資料框中根據分類列值劃分數值列的行值?


如果我們有一個包含兩個或多個類別的分類列和一個數值列,那麼我們可能希望將一個類別數值與其他類別數值相除。這可以使用除號“/”來完成,但我們需要使用值的正確子集。

示例

考慮下面的資料框:

線上演示

x1<-rep(LETTERS[1:2],10)
y1<-rpois(20,5)
df1<-data.frame(x1,y1)
df1

輸出

  x1 y1
1  A 8
2  B 9
3  A 5
4  B 6
5  A 6
6  B 4
7  A 8
8  B 3
9  A 4
10 B 6
11 A 6
12 B 11
13 A 4
14 B 6
15 A 4
16 B 5
17 A 5
18 B 7
19 A 10
20 B 1

將df1中B的y1除以A:

示例

df1$y1[which(df1$x1=="B")]/df1$y1[which(df1$x1=="A")]

輸出

[1] 1.1250000 1.2000000 0.6666667 0.3750000 1.5000000 1.8333333 1.5000000 [8] 1.2500000 1.4000000 0.1000000

示例

線上演示

x2<-rep(c("India","USA","China","Turkey"),5)
y2<-sample(1:9,20,replace=TRUE)
df2<-data.frame(x2,y2)
df2

輸出

   x2    y2
1 India   9
2 USA     5
3 China   7
4 Turkey  2
5 India   1
6 USA     9
7 China   7
8 Turkey  1
9 India   8
10 USA    1
11 China  7
12 Turkey 9
13 India  1
14 USA    3
15 China  8
16 Turkey 2
17 India  7
18 USA    1
19 China  5
20 Turkey 4

將df2中印度的y2除以美國的y2:

示例

df2$y2[which(df2$x2=="India")]/df2$y2[which(df2$x2=="USA")]

輸出

[1] 1.8000000 0.1111111 8.0000000 0.3333333 7.0000000

將df2中印度的y2除以土耳其的y2:

示例

df2$y2[which(df2$x2=="India")]/df2$y2[which(df2$x2=="Turkey")]

輸出

[1] 4.5000000 1.0000000 0.8888889 0.5000000 1.7500000

將df2中土耳其的y2除以中國的y2:

示例

df2$y2[which(df2$x2=="Turkey")]/df2$y2[which(df2$x2=="China")]

輸出

[1] 0.2857143 0.1428571 1.2857143 0.2500000 0.8000000

更新於:2020年12月7日

347 次檢視

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.