如何基于另一个数据框更新一个数据框中的列?

时间:2019-05-31 13:32:37

标签: r dataframe

我需要查看如何更新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 个答案:

答案 0 :(得分:2)

这是合并的另一种选择,

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 :(得分:1)

我们可以做到

#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

如果您在df1中有多个条目为0的条目,这也应该起作用。

我们可以像使用ifelse一样

ifelse(df1$salary == 0, df2$salary2[match(df1$empID, df2$empID)], df1$salary)