【问题标题】:R - merge() returns NA´s in ALL columns although all.x=TR - merge() 在所有列中返回 NA,尽管 all.x=T
【发布时间】:2013-10-18 14:21:43
【问题描述】:

我是新来的,已经在论坛中搜索了我的问题,但没有找到解决方案。 我有两个数据框,我想在一个公共关键字段上合并。

          merge(x
               ,y
               ,by.x="a"
               ,by.y="b"
               ,all.x=T
               ,sort=F
               )

由于我的 x-Dataframe 的行数比 y-Dataframe 的多,我想保留 x 中的所有行,y 中的列 NA,但 x 中的列中的所有值。此代码仅为所有列(来自 x 和 y 的列)中具有 NA 的不匹配案例提供额外的行。如果有人可以帮助我,我将不胜感激?我的错在哪里?

例子:

a = data.frame(c(111,222,333,444),c(1,5,3,8))
b = data.frame(c(111,222),c(0.1,0.4))
colnames(a)=c("code","value")
colnames(b)=c("code","value")
c = merge(a
          ,b
          ,by="code"
          ,all.x=T)

在这个例子中它工作正常。在我的数据中,我在第 3 行和第 4 行的所有列中都获得了 NA。

希望你能理解我这个糟糕的例子?!

谢谢! 杰西卡;)

【问题讨论】:

  • 欢迎来到 SO。请提供可重现的示例,以便我们更轻松地找到您的问题。
  • 如果您在x 数据集中匹配的列(示例数据集中的code)存在缺失值 (NA),则可能会发生这种情况。是这样吗?
  • 不,我刚刚检查过。任何一个匹配列中都没有 NA...

标签: r merge na


【解决方案1】:

只需设置all=TRUE

# Create your data
x<-data.frame(val1=c(2,8,6,3),a=c('h','k','b','e'))
y<-data.frame(val2=c(4,1),b=c('h','e'))
# Outer join
merge(x,y,by.x='a',by.y='b',all=TRUE)
#   a val1 val2
# 1 b    6   NA
# 2 e    3    1
# 3 h    2    4
# 4 k    8   NA

【讨论】:

  • 不幸的是,在您的示例中,使用我的数据我会得到整个第 1 行和第 4 行的 NA?!
  • @nograpes,你能解释一下为什么会这样吗?它对我有用,但我想知道它背后的原因。谢谢。
  • 如果您提出左外连接或右外连接,all=TRUE 是没有选择的。
【解决方案2】:

奇怪的是,如果您从 @nograpes 重新运行完全相同的代码,但在 xy 中具有相同的列名,那么您会得到与示例中一样的 NA。见下文

x <- data.frame(val1=c(2,8,6,3), a=c('h','k','b','e'))
y <- data.frame(val2=c(4,1),     a=c('h','e'))
merge(x, y, by = 'a', all=TRUE)

控制台的结果是

a  val1 val2
b    6   NA
e    3    1
h    2    4
k    8   NA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2020-08-04
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多