逐行比较两个数据帧,并在每次不相等时添加一行

时间:2018-02-01 09:24:54

标签: r dataframe

我试图逐行比较两个数据帧,假设df1有4行,df2有3行:

df1 <- data.frame(x1=c('a','b','c','d'),x2=c(1,2,3,4))
df2 <- data.frame(x1=c('a','b','d'),x2=c(5,6,7))

我想通过逐行比较df2来变换df2:每次df2的column1中的第i行的值与df1的column1中的第i行的值不同时,我想添加一个df2中的新行,以便在循环结束时,两个数据帧具有相同的行数,并且第一列完全相同。

这意味着我希望df2在比较结束时看起来像这样:

df2 <- data.frame(x1=c('a','b','c','d'),x2=c(5,6,0,7))

我尝试过循环,但R返回错误

  

Ops.factor中的错误(df1 [i,1],df2 [i,1]):     les niveaux des facteursdiffèrent“

for (i in 1:length(df2)){
  if (df1[i,1]!=df2[i,1])
  {df1<- rbind(df1[1:i,],df2[i,],df1[i+1,])}
}

1 个答案:

答案 0 :(得分:2)

你想基本上做左联接:

new_df2 <- merge(df1["x1"],df2,all.x=TRUE)

然后,如果您想要0而不是NA

new_df2$x2[is.na(new_df2$x2)] <- 0

#   x1 x2
# 1  a  5
# 2  b  6
# 3  c  0
# 4  d  7