9

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

          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。

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

谢谢!杰西卡;)

4

2 回答 2

2

刚设置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
于 2013-10-18T15:43:46.230 回答
0

奇怪的是,如果您从 @nograpes 重新运行完全相同的代码,但在 and 中具有相同的列名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
于 2020-09-09T14:06:51.963 回答