【问题标题】:Compare two dataframes row by row and add a row each time they are not equal逐行比较两个数据帧,每次不相等时添加一行
【发布时间】:2018-07-11 13:44:04
【问题描述】:

我正在尝试逐行比较两个数据帧,假设 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 与 df1 进行比较来转换 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 facteurs diffèrent"

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

【问题讨论】:

  • data.frame(x1 = df1$x1 ,x2 = df2$x2[match(df1$x1, df2$x1)])

标签: r dataframe


【解决方案1】:

基本上你想做一个左连接:

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

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2019-01-02
    • 2021-09-16
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多