如何在 R 中將 data.table 物件行按每行中不包括 0 的最大值進行除法運算?


若要將 R 的 data.table 物件按每行中不包括 0 的行最大值進行除法運算,我們可以按照以下步驟操作 −

  • 首先,建立一個 data.table 物件。
  • 然後,使用 apply 函式和 if else 函式將 data.table 物件行按每行中不包括 0 的行最大值進行除法運算。

建立 data.table 物件

讓我們建立一個 data.table 物件,如下所示 −

> library(data.table)
> x<-sample(0:5,25,replace=TRUE)
> y<-sample(0:5,25,replace=TRUE)
> z<-sample(0:5,25,replace=TRUE)
> DT<-data.table(x,y,z)
> DT

執行以上指令碼,會生成以下輸出(此輸出會因為隨機化的影響而因系統而異) −

    x y z
1:  2 0 3
2:  2 3 2
3:  0 1 3
4:  0 3 1
5:  1 5 2
6:  1 3 0
7:  4 5 2
8:  0 1 4
9:  4 2 0
10: 3 2 4
11: 1 4 3
12: 2 5 2
13: 4 2 0
14: 1 1 5
15: 1 2 4
16: 0 3 0
17: 4 1 1
18: 5 0 3
19: 2 0 4
20: 4 5 3
21: 4 0 3
22: 3 0 1
23: 2 1 5
24: 0 1 2
25: 2 1 1
    x y z

將 data.table 物件行按每行中不包括 0 的行最大值進行除法運算

使用 apply 函式將 DT 的行按每行中不包括 0 的行最大值進行除法運算 −

> library(data.table)
> x<-sample(0:5,25,replace=TRUE)
> y<-sample(0:5,25,replace=TRUE)
> z<-sample(0:5,25,replace=TRUE)
> DT<-data.table(x,y,z)
> DT_new<-t(apply(DT,1, function(x) if (0 %in% x) x else x/max(x)))
> DT_new

輸出

x y z
[1,] 2.0000000 0.00 3.0000000
[2,] 0.6666667 1.00 0.6666667
[3,] 0.0000000 1.00 3.0000000
[4,] 0.0000000 3.00 1.0000000
[5,] 0.2000000 1.00 0.4000000
[6,] 1.0000000 3.00 0.0000000
[7,] 0.8000000 1.00 0.4000000
[8,] 0.0000000 1.00 4.0000000
[9,] 4.0000000 2.00 0.0000000
[10,] 0.7500000 0.50 1.0000000
[11,] 0.2500000 1.00 0.7500000
[12,] 0.4000000 1.00 0.4000000
[13,] 4.0000000 2.00 0.0000000
[14,] 0.2000000 0.20 1.0000000
[15,] 0.2500000 0.50 1.0000000
[16,] 0.0000000 3.00 0.0000000
[17,] 1.0000000 0.25 0.2500000
[18,] 5.0000000 0.00 3.0000000
[19,] 2.0000000 0.00 4.0000000
[20,] 0.8000000 1.00 0.6000000
[21,] 4.0000000 0.00 3.0000000
[22,] 3.0000000 0.00 1.0000000
[23,] 0.4000000 0.20 1.0000000
[24,] 0.0000000 1.00 2.0000000
[25,] 1.0000000 0.50 0.5000000

更新於: 13-8-2021

133 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告