R 将表1中的数据帧和覆盖值与表2中的所有值组合起来

R 将表1中的数据帧和覆盖值与表2中的所有值组合起来,r,dataframe,dplyr,R,Dataframe,Dplyr,我有两个数据帧需要合并到一个匹配的列上,第二个表需要替换第一个表中列匹配的所有值 我已经尝试了下面代码的几个变体,但是没有返回与原始代码相同大小的数据帧 merge.data.frame(x,y,by.x=“Name”,by.y=“Name”) merge.data.frame(x,y,by.x=“SN”,all.x=FALSE,y all.y=TRUE) 用于此目的的变量如下所示 x您可以删除x中与y中的SN值匹配的SN值,然后行绑定两个数据帧 rbind(x[!x$SN %in% y$SN

我有两个数据帧需要合并到一个匹配的列上,第二个表需要替换第一个表中列匹配的所有值

我已经尝试了下面代码的几个变体,但是没有返回与原始代码相同大小的数据帧

merge.data.frame(x,y,by.x=“Name”,by.y=“Name”)
merge.data.frame(x,y,by.x=“SN”,all.x=FALSE,y all.y=TRUE)
用于此目的的变量如下所示


x您可以删除
x
中与
y
中的
SN
值匹配的
SN
值,然后行绑定两个数据帧

rbind(x[!x$SN %in% y$SN,], y) 

  SN Age Name
1  1  21 John
2  2  15 Dora
3  3  44 <NA>
4  4 100    B
rbind(x[!x$SN%in%y$SN,],y)
SN年龄名称
1 1 21约翰
2215朵拉
3  3  44 
4100B

我发现更容易阅读的一个较长的解决方案是首先筛选x中存在于y中的行,然后将y添加到x中

# Added stringsAsFactors as False in df's.
x <- data.frame("SN" = 1:4, "Age" = c(21,15,44,55), "Name" = c("John","Dora", NA, NA), stringsAsFactors = F)
y <- data.frame("SN" = 4, "Age" = c(100), "Name" = c("B"), stringsAsFactors = F)

# Joins
x %>% 
  anti_join(y, by = c("SN")) %>%  # Remove row from x that are in y
  bind_rows(y)                    # Add rows from y to x
#在df中将stringsAsFactors添加为False。
x%#从x中删除y中的行
绑定行(y)#将行从y添加到x

重复@是的,提出的问题是类似的,但引用的问题的解决方案仅替换单个列的值,这将匹配该列并将整行绑定到数据帧
  SN Gender Age Name       # z table with additional column
1  1   M    21  John 
2  2   F    15  Dora 
3  3   M    44   NA 
4  4   M    55   NA
  SN Gender Age Name       # result if additional columns are present in z and not in y
1  1   M    21  John 
2  2   F    15  Dora 
3  3   M    44   NA 
4  4   M    100  B
rbind(x[!x$SN %in% y$SN,], y) 

  SN Age Name
1  1  21 John
2  2  15 Dora
3  3  44 <NA>
4  4 100    B
# Added stringsAsFactors as False in df's.
x <- data.frame("SN" = 1:4, "Age" = c(21,15,44,55), "Name" = c("John","Dora", NA, NA), stringsAsFactors = F)
y <- data.frame("SN" = 4, "Age" = c(100), "Name" = c("B"), stringsAsFactors = F)

# Joins
x %>% 
  anti_join(y, by = c("SN")) %>%  # Remove row from x that are in y
  bind_rows(y)                    # Add rows from y to x