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