如何在R程式設計中匹配和替換儲存在R資料框中的列名?


如果我們有一個數據框,其中包含一列與資料框的列名匹配的列名,以及另一列包含不同值,那麼我們可以將這些不同值設定為具有匹配列名的資料框的新列名。

這可以透過match函式來實現。檢視下面的示例以瞭解其工作原理。

示例1

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

x1<-rnorm(20)
x2<-rnorm(20)
x3<-rnorm(20)
df1<-data.frame(x1,x2,x3)
df1

建立了以下資料框

            x1          x2           x3
1   0.76231437 -0.18459872 -0.836848620
2   0.31998649  1.24599469  0.096976964
3   0.11319510 -1.19200362 -0.824255747
4   0.47570366  0.24791478  0.355295166
5  -0.84546806  1.05928526 -1.073653485
6  -1.89667914  0.92187888  1.552141225
7  -1.81604483  0.05974304 -0.244209195
8   0.05762202  0.14238099  0.957877205
9  -0.79539907  0.42396450  0.219413291
10  0.47248362  2.44519391 -0.126831024
11  0.91802738 -0.84282349  1.577785667
12 -1.30378165  1.04226653 -0.528164742
13  0.88999575  1.74773475  1.409087713
14 -0.43192360  0.11203207  0.976614195
15 -0.68683934  0.67849795 -0.004272223
16 -0.68894471  1.33377663 -0.397701119
17  1.06729808 -0.04649078  0.578908343
18 -0.73322670 -0.52255298  0.355650527
19  0.28593460 -1.19460885 -0.094308012
20  0.76086277 -0.38646442 -0.484786025

將以下程式碼新增到上面的程式碼片段中:

x1<-rnorm(20)
x2<-rnorm(20)
x3<-rnorm(20)
df1<-data.frame(x1,x2,x3)
df1_col<-data.frame(Var1=c("x","y","z"),Var2=c("x1","x2","x3"))
df1_col

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

  Var1 Var2
1   x    x1
2   y    x2
3   z    x3

要將df1的列名更改為上面建立的資料框中df1_col中Var1的值,請將以下程式碼新增到上面的程式碼片段中:

x1<-rnorm(20)
x2<-rnorm(20)
x3<-rnorm(20)
df1<-data.frame(x1,x2,x3)
df1_col<-data.frame(Var1=c("x","y","z"),Var2=c("x1","x2","x3"))
names(df1) <- df1_col$Var1[match(names(df1),df1_col$Var2)]
df1

輸出

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

           x y z
1   0.76231437 -0.18459872 -0.836848620
2   0.31998649  1.24599469  0.096976964
3   0.11319510 -1.19200362 -0.824255747
4   0.47570366  0.24791478  0.355295166
5  -0.84546806  1.05928526 -1.073653485
6  -1.89667914  0.92187888  1.552141225
7  -1.81604483  0.05974304 -0.244209195
8   0.05762202  0.14238099  0.957877205
9  -0.79539907  0.42396450  0.219413291
10  0.47248362  2.44519391 -0.126831024
11  0.91802738 -0.84282349  1.577785667
12 -1.30378165  1.04226653 -0.528164742
13  0.88999575  1.74773475  1.409087713
14 -0.43192360  0.11203207  0.976614195
15 -0.68683934  0.67849795 -0.004272223
16 -0.68894471  1.33377663 -0.397701119
17  1.06729808 -0.04649078  0.578908343
18 -0.73322670 -0.52255298  0.355650527
19  0.28593460 -1.19460885 -0.094308012
20  0.76086277 -0.38646442 -0.484786025

示例2

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

a<-rpois(20,2)
b<-rpois(20,5)
c<-rpois(20,2)
df2<-data.frame(a,b,c)
df2

建立了以下資料框

   a b c
1  3 6 0
2  1 7 5
3  2 5 3
4  1 1 2
5  4 9 2
6  0 3 3
7  1 6 1
8  0 6 3
9  4 6 2
10 1 4 2
11 3 2 2
12 0 6 2
13 1 4 2
14 0 7 2
15 4 2 2
16 2 4 5
17 2 3 0
18 4 5 4
19 3 3 1
20 3 4 2

將以下程式碼新增到上面的程式碼片段中:

a<-rpois(20,2)
b<-rpois(20,5)
c<-rpois(20,2)
df2<-data.frame(a,b,c)
df2_col<-data.frame(Ranks=c("Rank1","Rank2","Rank3"),Var=c("a","b","c"))
df2_col

輸出

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

  Ranks Var
1 Rank1  a
2 Rank2  b
3 Rank3  c

要將df2的列名更改為上面建立的資料框中df2_col中Var的值,請將以下程式碼新增到上面的程式碼片段中:

a<-rpois(20,2)
b<-rpois(20,5)
c<-rpois(20,2)
df2<-data.frame(a,b,c)
df2_col<-data.frame(Ranks=c("Rank1","Rank2","Rank3"),Var=c("a","b","c"))
names(df2)<-df2_col$Ranks[match(names(df2),df2_col$Var)]
df2

輸出

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

 Rank1 Rank2 Rank3
1    3     6    0
2    1     7    5
3    2     5    3
4    1     1    2
5    4     9    2
6    0     3    3
7    1     6    1
8    0     6    3
9    4     6    2
10   1     4    2
11   3     2    2
12   0     6   2
13   1     4   2
14   0     7   2
15   4     2   2
16   2     4   5
17   2     3   0
18   4     5   4
19   3     3   1
20   3     4   2

更新於:2021年11月1日

760次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告