2015-03-27 3 views
1

В моем «dataset1» у меня есть своего рода словарь, где каждый код соответствует состоянию. В моем втором наборе данных «dataset2» я хотел бы сопоставить код с соответствующим состоянием. Я был бы признателен за обобщаемое, векторизованное решение.Соответствие соответствия в R

Входы:

dataset1    

V1   V2 
001 'State1' 
005 'State2' 
011 'State3' 
011 'State3' 
005 'State2' 
dataset2 

V1 
011 
001 
011 
005 

Желаемый результат:

011 'State3' 
001 'State1' 
011 'State3' 
005 'State2' 

ответ

2

Используйте функцию Rmerge:

result <- merge(unique(dataset1), dataset2, by = "V1", all.x=FALSE, all.y=TRUE) 

> result 
    V1  V2 
1 001 State1 
2 005 State2 
3 011 State3 
4 011 State3 

Это будет включать в себя все государства от dataset2, но будет включать в себя только уникальный Состояния от dataset1, если они отображаются в dataset2.

+0

Я настоятельно рекомендую использовать 'true' и' false' вместо 'и' Т * f'. Посмотрите, что происходит, когда 'F = 1' и' T = "oups" 'например. –

+0

В этом случае 'T' может быть переменной, но' TRUE' не может? –

+1

Попробуйте 'TRUE <- 1'. –

0

Другой подход с использованием match. Обратите внимание, что для нескольких записей в dataset1, match будет использовать первый столкновение.

dataset3 <- data.frame(V1=dataset2$V1, 
         V2=as.character(dataset1$V2[match(x = dataset2$V1, 
                 table = dataset1$V1)])) 

И иметь точное форматирование:

cat(sprintf("%003.0f '%s'\n", ds3$V1, ds3$V2)) 
# 011 'State3' 
# 001 'State1' 
# 011 'State3' 
# 005 'State2'