2014-01-13 4 views
2

У меня есть два data.frames df1 и df2, df1 имеет 12,869 строк и имеет df2 173398. df1 имеет 2 колонки первым является числовым, а второй является символом. df2 имеет также 2 столбца как числовые. Я хочу заменить числа в df2 на основе значений символов df1[,2]. Вот как глава моих data.frames выглядит следующим образом:значения совпадают с data.frames с различным количеством строк

>head(df1) 
ids genes 
1 1 NSD1 
2 2 MAST2 
3 3 PHB 
4 4 IKBKAP 
5 5 CDC42 
6 6 SAT1 

>head(df2) 
    X1 X2 
1 933 3982 
2 1791 2504 
3 3379 3394 
4 1381 9732 
5 2002 6408 
6 3947 7579 

Большое спасибо

Я пробовал эти два подхода:

df2[,1] <- setNames(df1$genes, df2$X1)[as.character(unlist(df2[,1]))] 

df2[,1] <- df2[match(df1[,1], df2[,1]),2] 

Но они не работают

ответ

2

С помощью другого df2 для демонстрации вы можете:

df2 <- read.table(text=" 
X1 X2 
1 2 3 
2 1 4 
3 5 1 
4 3 5 
5 1 2 
6 2 1", header=T) 

df2$X1 <- as.character(df1$genes)[match(df2$X1, df1$ids)] 
df2$X2 <- as.character(df1$genes)[match(df2$X2, df1$ids)] 

df2 
    X1  X2 
1 MAST2 PHB 
2 NSD1 IKBKAP 
3 CDC42 NSD1 
4 PHB CDC42 
5 NSD1 MAST2 
6 MAST2 NSD1 

HTH

+0

спасибо @Mark Hechkman, он работает и довольно быстро. – user2380782

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