将行名称替换为 r 中数据框中的值

substitution of a row name for a value in a dataframe in r

好的,所以我有这个数据框 (829x2),其中第一列由另一个矩阵的行号组成。我需要将这些行号替换为第二个数据帧 (676X2) 第二列的值(ID 号)。

这是第一个数据帧的数据帧 1 和 2 的前几行

数据帧 1:

   Col1(rownames to be replaced)          Col2
X1 167                                 -2.623973e-01
X2 c(14, 275)                          -2.241113e-01
X3 4                                   -3.066684e-01
X4 c(493, 165, 170, 187, 224, 246, 262)-2.369324e-01
X8 c (207, 233, 235, 236, 622, 624)    -8.503367e-02
X10 369                                -2.217171e-01

数据帧 2:

  Col1      Col2(Data I want replace the rownames)
1 Formic    C00058 
2 Methanoic C00058 
3 Ethanoic  C00033
4 Acetic    C00033
5 Propionic C00163
6 Propanoic C00163
7 Butyric   C00246

所以,这就是我想要的最终产品(这只是一个例子,数字并不准确)

   Col1                              Col2
X1 C00043                          -2.623973e-01
X2 c(C00012, C00125)               -2.241113e-01
X3 C00033                          -3.066684e-01
X4 c(C00023, C00078, etc...)       -2.369324e-01

这是数据帧 1 的 dput()。KEGGnumber=Col1 Cor=Col2

>dput(datamap2[1:10,])
structure(list(KEGGnumber = structure(list(X1 = 167, X2 = c(14, 
275), X3 = 4, X4 = c(493, 165, 170, 187, 224, 246, 262), X8 = c(207, 
233, 235, 236, 622, 624), X10 = 369, X11 = c(207, 233, 235, 236, 
622, 624), X12 = 17, X13 = c(225, 240, 622, 623, 626, 631), X21 = c(447, 
579)), .Names = c("X1", "X2", "X3", "X4", "X8", "X10", "X11", 
"X12", "X13", "X21")), Cor = c(-0.26239726267789, -0.22411133150271, 
-0.30666840337651, -0.236932418052063, -0.085033673316946, -0.221717142242715, 
-0.23574540607512, -0.254068790827129, -0.410952995109905, 0.0585077720606303
)), .Names = c("KEGGnumber", "Cor"), row.names = c("X1", "X2", 
"X3", "X4", "X8", "X10", "X11", "X12", "X13", "X21"), class = "data.frame")

这是使用 lapply 的一种方法:

df$KEGGnumber <- lapply(df$KEGGnumber, function(rows) df2$Col2[rows])
df
#        KEGGnumber        Cor
# X1         C00058 -0.2623973
# X2 C00163, C00246 -0.2241113
# X3         C00033 -0.3066684
# X4 C00033, C00033 -0.2369324

我稍微修改了您的数据,以便它对您提供的数据框 2 有意义:

df
#    KEGGnumber        Cor
# X1          2 -0.2623973
# X2       5, 7 -0.2241113
# X3          4 -0.3066684
# X4       3, 4 -0.2369324

df2
#        Col1   Col2
# 1    Formic C00058
# 2 Methanoic C00058
# 3  Ethanoic C00033
# 4    Acetic C00033
# 5 Propionic C00163
# 6 Propanoic C00163
# 7   Butyric C00246