我有两个 Dataframe :
DF1<-data.frame(VAR1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
VAR2 = c('John','Bob','Hannah'), VAR3 = c(1,1,1,2),
VAR4=NA)
DF2<-data.frame(VAR1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
VAR2 = c('John','Bob','Hannah','Dave'),
VAR4 = c('A','B','C'))
我想将DF2$VAR4复制到DF1$VAR4中,对于条件如果满足(DF1$VAR1==DF2$VAR1)&(DF1$VAR2==DF2$VAR2),则无论DF1$VAR3取什么值,DF2$VAR4中的每一对(VAR1,VAR2)都只有一个元素,而DF1没有。事实上,DF1$VAR3计算每一对(DF1$VAR1,DF1$VAR2)出现的次数。
我试着(从另一个主题)
DF3<-merge(DF1, DF2[,'VAR4'], by= c('VAR1','VAR2'))
这应该能解决问题,但我得到的是“fix.by(by.y,y)中得错误:”by“必须指定唯一有效得列”
我检查了很多次,但是没有拼写错误,VAR1和VAR2都存在于两个 Dataframe 中,并且方向一致。我不知道我在这里错过了什么。
我对R语法非常陌生,所以我用嵌套循环解决了它:
for (i in DF1$VAR1){
for (j in DF1$VAR2[DF1$VAR1==i]){
DF1$VAR4[DF1$VAR1==i & DF1$VAR2==j] <- DF2$VAR4[DF2$VAR1==i & DF2$VAR2==j]
}
}
这个方法很好用,但是非常慢。我很确定这个解决方案很简单,但是我就是不能解决它。非常感谢你的时间
2条答案
按热度按时间xfb7svmp1#
我们可以从
dplyr
使用rows_update
(实验):输出量:
lo8azlld2#
您可以使用left_join: