2015-10-14 3 views
1

Я пытаюсь отобразить/заменить элементы одного кадра данных на соответствующий элемент другого. Позвольте мне привести пример.Замена элементов кадра данных с использованием соответствующего фрейма данных

У меня есть этот dataframe:

rbind(c("a","b","c"),c("b","a","c"),c("c","b","a")) 
    [,1] [,2] [,3] 
[1,] "a" "b" "c" 
[2,] "b" "a" "c" 
[3,] "c" "b" "a" 

И это одно:

rbind(c("a",1),c("b",2),c("c",3)) 
    [,1] [,2] 
[1,] "a" "1" 
[2,] "b" "2" 
[3,] "c" "3" 

Как я могу, заменяющий все а с 1s, все б с 2s, и все гр с 3s , Чтобы получить окончательный кадр данных, который выглядит так.

1 2 3 
2 1 3 
3 2 1 

Также, поймите, что я делаю это с гораздо большим набором данных. Я просто не могу найти правильный способ сделать это.

Спасибо заранее!

+0

Почтовый индекс, который создает эти объекты. –

+0

df <-rbind (c («a», «b», «c»), c («b», «a», «c»), c («c», «b», «a»)) df1 <-rbind (c ("a", 1), c ("b", 2), c ("c", 3)) – Basqueinmyglory

+0

Для данных, это может быть 'm1 [] <- m2 [, 2] [match (m1, m2 [, 1])] ' –

ответ

3

Было бы разумнее создать именованный вектор. Затем вы можете использовать возможности индексирования функции «[»:

a <- rbind(c("a","b","c"),c("b","a","c"),c("c","b","a")) 
    b <- c("a"=1,"b"=2, "c"=3) 

> b 
a b c 
1 2 3 
> a[] <- b[a] 
> a 
    [,1] [,2] [,3] 
[1,] "1" "2" "3" 
[2,] "2" "1" "3" 
[3,] "3" "2" "1" 
+0

Это сработало! Спасибо Большое. Мне действительно нужно больше познакомиться с функцией «[». – Basqueinmyglory

+0

Точно. «[» И «[[» функции являются ядром R. –

0

Менее элегантный ответ, но это можно сделать с изменением формы.

library(dplyr) 
library(tidyr) 

key = 
    rbind(c("a",1),c("b",2),c("c",3)) %>% 
    as.data.frame %>% 
    setNames(c("letter", "number")) 

rbind(c("a","b","c"),c("b","a","c"),c("c","b","a")) %>% 
    as.data.frame %>% 
    mutate(ID = 1:n()) %>% 
    gather(variable, letter, -ID) %>% 
    left_join(key) %>% 
    select(-letter) %>% 
    spread(variable, number) 
Смежные вопросы