合并all.x = T引入NA' s

时间:2014-10-15 07:21:23

标签: r merge dataframe

我的数据看起来像这个简化(缩短)的样本数据:

old <- data.frame(nr=c(4551, 4001, 301, 4271, 321, 4221, 261), name=c("Aadorf", "Aarau", "Aarberg", "Aarburg", "Aarwangen", "Abtwil", "Zollikon"), nr=c(26.3, 38.4, 30.8, 34.7, 31.0, 20.5, 31.5))
new <- data.frame(nr=c(4560, 4001,  301, 4271,  321, 4221), nr=c(46.65, 56.64, 57.62, 55.33, 61.62, 35.77))

现在我想用它的数字合并两个data.frames

both <- merge(old, new, all.x=T, by="nr")

这很有效,但是当我看一下输出时,我松了一些old的名字:

> both
       nr      name    nr.1.x  nr.1.y
  [1]  301   Aarberg   30.8    57.62
  [2]  321 Aarwangen   31.0    61.62
  [3] 4001     Aarau   38.4    56.64
  [4] 4221    Abtwil   20.5    35.77
  [5] 4271   Aarburg   34.7    55.33
  [6] 4551    Aadorf   26.3    NA
  [7]  261        NA   31.5    NA

我不明白为什么它引入NA而不是第七行中的名称。如果我运行我的例子,我没有那个问题(我想这是因为数字太小),但它应该说明我正在努力的事情。当我查看我的数据时,R引入NA和不引用的地方似乎很随机。

有什么建议吗?谢谢!

这是原始数据: New Old

1 个答案:

答案 0 :(得分:1)

为什么不省略='nr':

> merge(new, old, all=T)
     nr  nr.1      name
1   261 31.50  Zollikon
2   301 30.80   Aarberg
3   301 57.62      <NA>
4   321 31.00 Aarwangen
5   321 61.62      <NA>
6  4001 38.40     Aarau
7  4001 56.64      <NA>
8  4221 20.50    Abtwil
9  4221 35.77      <NA>
10 4271 34.70   Aarburg
11 4271 55.33      <NA>
12 4551 26.30    Aadorf
13 4560 46.65      <NA>