连接两个数据帧并覆盖匹配行[R]
我环顾四周,发现了很多类似的问题,但都没有回答我的问题,就这样 我希望按列连接R中的两个数据帧(如rbind),并让第二个表覆盖第一列的匹配值,这样第一列的值就不会重复 我想这样做:连接两个数据帧并覆盖匹配行[R],r,dataframe,R,Dataframe,我环顾四周,发现了很多类似的问题,但都没有回答我的问题,就这样 我希望按列连接R中的两个数据帧(如rbind),并让第二个表覆盖第一列的匹配值,这样第一列的值就不会重复 我想这样做: a<-data.frame(c("Foo", "Moo", "Boo"), c(1, 2, 3), stringsAsFactors=F) colnames(a)<-c("Name", "Value") b<-data.frame(c("Boo", "Bar", "Bat"), c(11, 12,
a<-data.frame(c("Foo", "Moo", "Boo"), c(1, 2, 3), stringsAsFactors=F)
colnames(a)<-c("Name", "Value")
b<-data.frame(c("Boo", "Bar", "Bat"), c(11, 12, 13), stringsAsFactors=F)
colnames(b)<-c("Name", "Value")
rbind_and_overwrite(a, b)
# Output
# Name Value
# 1 Foo 1
# 2 Moo 2
# 3 Boo 11
# 4 Bar 12
# 5 Bat 13
a我只需在%
中使用%来测试b中a中不存在的Name
s,然后只测试rbind()
这些行到a
rbind(a, b[!b$Name %in% a$Name,])
# Name Value
# 1 Foo 1
# 2 Moo 2
# 3 Boo 3
# 21 Bar 12
# 31 Bat 13
我玩游戏有点晚了,但考虑到OP,接受的答案实际上是不正确的:它不会覆盖匹配的行,而是保留原始行(示例中的第3行:Boo,3)
我不能想出一个优雅的解决方案,我能做的最好的是这个dplyr管道,但它正确地完成了工作:
library(dplyr)
> a %>%
+ filter(!Name %in% b$Name) %>%
+ bind_rows(b)
Name Value
1 Foo 1
2 Moo 2
3 Boo 11
4 Bar 12
5 Bat 13
现在看起来很简单!要让b名称覆盖a名称,而不是相反,我只需执行rbind(a[!a$Name%在%b$Name,]中),b)。谢谢鉴于OP,这实际上不是正确答案,它不会覆盖匹配项,而是保留原始行。