2016-05-17 2 views
0

У меня есть два data.frames, как это:Присвоить значение для двух условий

df1:

col1 col2 col3 
1  2  20 
2  4  30 
3  4  25 

df2:

colX colY colZ 
    5  12  
    1  9  
    1  2  

Теперь я хочу, чтобы присвоить значения colZ в df2. Это должно быть число в col3 из df1, когда значения в col1 равна colX и col2 составляет Коли

Желаемая выход:
df2:

colX colY colZ 
    5  12 NA 
    1  9 NA 
    1  2 20 

Я надеюсь, что кто-то может помочь мне

+0

'слияния (df2, df1, by.x = C ('colX', 'Coly'), by.y = C ('col1', 'col2'), all.x = TRUE),' – SeaSprite

ответ

0

Используя функцию merge() с достаточным количеством колоколов и свистков, вы получите результат, который вы хотите. Фокус здесь заключается в использовании by.x=c(...) и by.y=c(...), чтобы указать несколько столбцов, по которым нужно объединиться во время слияния. Существует также массажирование, чтобы получить имена столбцов, как вы хотите, в желаемом выходе.

result <- merge(df1, df2, by.x=c("col1", "col2"), by.y=c("colX", "colY"), all.y=TRUE)[, 1:3] 
names(result) <- c("colX", "colY", "colZ") 

> result 
    colX colY colZ 
1 1 2 20 
2 1 9 NA 
3 5 12 NA 
+0

не должно быть merge (df, df2, by.x = c ("col1", "col2"), by.y = c ("colX", "colY"), all.y = TRUE)? – Marsenau

+0

Оставьте свой комментарий, спасибо. –

+0

Привет, Тим, спасибо за ответ. Здесь что-то идет не так, он удаляет несколько строк, создавая дубликаты многих других. – jranzijn

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