如何在R中將所有列除以一列並保留原始資料?


為了將R資料框的所有列除以一列並保留原始資料,我們可以使用dplyr包的mutate_at函式以及list函式。

例如,如果我們有一個名為df的資料框,它包含五個列,例如x、y、z、a和b,那麼我們可以使用以下命令將所有列除以b並保留原始資料:

df%>%mutate_at(vars(x:b),list(All_by_b=~./b))

示例1

以下程式碼片段建立一個示例資料框:

x1<-rpois(20,5)
x2<-rpois(20,5)
x3<-rpois(20,2)
df1<-data.frame(x1,x2,x3)
df1

建立了以下資料框:

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

為了載入dplyr包並將每一列除以x3,請將以下程式碼新增到上面的程式碼片段中:

library(dplyr)
df1%>%mutate_at(vars(x1:x3),list(All_by_x3=~./x3))

輸出

如果您將上面給出的所有程式碼片段作為一個程式執行,它將生成以下輸出:

   x1 x2 x3 x1_All_by_x3 x2_All_by_x3 x3_All_by_x3
1  6  8  5  1.200000    1.600000       1
2  3  5  2  1.500000    2.500000       1
3  5  4  4  1.250000    1.000000       1
4  5  4  5  1.000000    0.800000       1
5  6  5  3  2.000000    1.666667       1
6  3  6  2  1.500000    3.000000       1
7 10  6  1 10.000000    6.000000       1
8  3  4  1  3.000000    4.000000       1
9  2  6  2  1.000000    3.000000       1
10 4  3  2  2.000000    1.500000       1
11 4  7  1  4.000000    7.000000       1
12 3  8  5  0.600000    1.600000       1
13 6  9  3  2.000000    3.000000       1
14 3  5  2  1.500000    2.500000       1
15 3  5  5  0.600000    1.000000       1
16 3  6  1  3.000000    6.000000       1
17 5  1  2  2.500000    0.500000       1
18 6  7  1  6.000000    7.000000       1
19 4  5  1  4.000000    5.000000       1
20 5  3  3  1.666667    1.000000       1

示例2

以下程式碼片段建立一個示例資料框:

y1<-rnorm(20)
y2<-rnorm(20)
df2<-data.frame(y1,y2)
df2

建立了以下資料框:

        y1          y2
1   0.14773302   1.16132215
2  -0.32074626  -1.49244515
3   2.19398775   0.28150318
4   1.01693094  -1.40535898
5  -1.42448609   1.67779412
6  -0.15938972  -1.09495586
7   0.52470550  -0.99145523
8  -0.78363853  -0.06675766
9   0.07709268  -0.12294655
10  0.78635469   2.58087152
11 -0.41811848  -0.41705329
12  0.64354838  -0.89271271
13 -0.42895143   0.52703245
14 -0.56728461  -0.43831806
15  0.39307336   0.08188360
16  1.10202078   0.35529659
17 -1.71921960   1.33118820
18 -1.13380901  -1.55504071
19  1.16703557   1.24537827
20 -0.32852345   1.48512287

要將每一列除以y1,請將以下程式碼新增到上面的程式碼片段中:

df2%>%mutate_at(vars(y1:y2),list(All_by_y1=~./y1))

輸出

如果您將上面給出的所有程式碼片段作為一個程式執行,它將生成以下輸出:

      y1           y2      y1_All_by_y1  y2_All_by_y1
1   0.14773302   1.16132215   1         7.86095182
2  -0.32074626  -1.49244515   1         4.65303993
3   2.19398775   0.28150318   1         0.12830663
4   1.01693094  -1.40535898   1        -1.38196108
5  -1.42448609   1.67779412   1        -1.17782416
6  -0.15938972  -1.09495586   1         6.86967673
7   0.52470550  -0.99145523   1        -1.88954609
8  -0.78363853  -0.06675766   1         0.08518935
9   0.07709268  -0.12294655   1        -1.59478895
10  0.78635469   2.58087152   1         3.28207048
11 -0.41811848  -0.41705329   1         0.99745242
12  0.64354838  -0.89271271   1        -1.38717265
13 -0.42895143   0.52703245   1        -1.22865298
14 -0.56728461  -0.43831806   1         0.77265989
15  0.39307336   0.08188360   1         0.20831633
16  1.10202078   0.35529659   1         0.32240462
17 -1.71921960   1.33118820   1        -0.77429794
18 -1.13380901  -1.55504071   1         1.37151910
19  1.16703557   1.24537827   1         1.06712966
20 -0.32852345   1.48512287   1        -4.52059930

更新於:2021年11月5日

3K+瀏覽量

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.