2016-07-14 2 views
0

Итак, у меня есть этот фрейм данных (829x2), в котором первый столбец состоит из номеров строк другой матрицы. Мне нужно подставить эти номера строк значениями (идентификационными номерами) из второго столбца второго блока данных (676X2).подстановка имени строки для значения в фрейме данных в r

Вот первые несколько рядов dataframe 1 и 2 первого dataframe

dataframe 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 

dataframe 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 

Здесь dput() из dataframe 1. 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") 
+0

Можете ли вы 'dput' ваш кадр данных? Это зависит от того, какая структура данных у вас есть в каждой ячейке 'Col1'. – Psidom

+0

Col1 формируется как список, но я могу его заблокировать(). Можете ли вы рассказать о dput? Я не знаком с фьюкцией. –

+0

Если вы введете 'dput (dataframe 1)' в свой вопрос, нам будет намного легче помочь. Используйте 'dput' на вашем фрейме данных, он выведет фактическую структуру блока данных, после чего вы сможете вставить результат. – Psidom

ответ

0

Вот один из способов сделать это с помощью 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 
+1

, который работает, чтобы создать список ID, который должен быть df $ KEGGnumber, но когда я пытаюсь установить его как df $ KEGGnumber, он выводит больше чисел, а не идентификаторы. –

+0

Является ли 'Col2' в вашем символе DataFrame 2? вам нужно преобразовать его в символ типа 'df2 $ Col2 <- as.character (df2 $ Col2)'. – Psidom

+0

Да, его класс является символом –

Смежные вопросы