Как обновить столбец в одном кадре данных на основе другого? - PullRequest
1 голос
/ 31 мая 2019

Мне нужно посмотреть, как обновить один столбец во фрейме данных, где employeeID совпадает с другим фреймом данных.

Например:

df1 > 

empID     salary
1         10000
2         15000
3         0

df2 >

empID     salary2
1         10000
2         15000
3         20000    

Мне нужно посмотреть, как обновить его, где df1 $ salary = 0, а затем обновить его, где df1 $ empID = df2 $ empID.

Я пытался это сделать, но получил сообщение об ошибке «Нет такого столбца: salary2»:

df1$salary <- ifelse(df1$salary == 0,sqldf("UPDATE df1 SET salary = salary2 WHERE df1.empID = df2.empID"),df1$salary)

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Вот еще один вариант слияния,

transform(merge(df1, df2, by = 'empID'), 
               salary = replace(salary, salary == 0, salary2[salary == 0]), 
               salary2 = NULL)

#  empID salary
#1     1  10000
#2     2  15000
#3     3  20000

Вы также можете использовать ifelse вместо replace для зарплаты, т.е.

salary = ifelse(salary == 0, salary2, salary)
1 голос
/ 31 мая 2019

Мы могли бы сделать

#find empID in df1 where salary is 0
inds <- df1$empID[df1$salary == 0]

#match empID with df2 and get respective salary and update df1
df1$salary[inds] <- df2$salary2[match(inds, df2$empID)]
df1
#  empID salary
#1     1  10000
#2     2  15000
#3     3  20000

Это также должно работать, если у вас есть несколько записей с 0 в df1.

Мы можем сделать то же самое, используя ifelse как

ifelse(df1$salary == 0, df2$salary2[match(df1$empID, df2$empID)], df1$salary)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...