将行名称替换为 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
好的,所以我有这个数据框 (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