R中是否有一种方法可以从另一个数据帧更新一个数据帧?

时间:2019-11-15 02:20:54

标签: r merge sql-update

我在R中有两个数据帧,我需要用另一个数据帧中的值更新一个数据帧中的值。我可以使用UPDATE在SQL中轻松地执行此操作,但是出于任何原因,R中的SQLite似乎都无法以相同的方式处理。

示例:

DF1 

col A   

xyz      
123

DF2 

col A   col B

xyz     abc
123     456

基于DF1的col A等于DF2的col A中的值,我想用DF2的col B中的值替换DF1中的colA。鉴于我是R语言的新手,这将是一个简单的UPDATE语句,但我无法在sqldf中使用该语法

这似乎可以满足我的需要-我只是对语法不熟悉:

DF1$colA <- DF2[match(DF1$colA,DF2$colB),2]

1 个答案:

答案 0 :(得分:2)

您可以使用ifelse检查是否相等,并用Col_B中的df2替换,否则按原样在Col_A中保留df1的值。方法如下:

df1$Col_A=ifelse(as.character(df1$Col_A) == as.character(df2$Col_A), as.character(df2$Col_B), as.character(df1$Col_A)
# df1
# Col_A
# 1   abc
# 2   456
# 3   567

数据

df1 <- data.frame(Col_A=c("xyz", "123", "567"))                                                                                                                                                                                                       
df2 <- data.frame(Col_A = c("xyz", "123"), 
                  Col_B = c("abc", "456"))

希望这会有所帮助。