【问题标题】:Problems merging data frames in R [duplicate]在R中合并数据帧的问题[重复]
【发布时间】:2020-08-29 18:23:35
【问题描述】:

我有两个数据框:

x <- data.frame("coi" = c(0,1,NA,1),"v2" = c(7,8,9,NA))
y <- data.frame("c1" = c(0,-1,1), "c2" = c(0,-1,-1), "coi" = c(0,1,NA))
> x
  coi v2
1   0  7
2   1  8
3  NA  9
4   1 NA
> y
  c1 c2 coi
1  0  0   0
2 -1 -1   1
3  1 -1  NA

我想将它们合并成这样的:

> obj
  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3  NA  9  1 -1
4   1 NA -1 -1

但是当我尝试时

merge(x,y)

我明白了:

  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3   1 NA -1 -1
4  NA  9  1 -1

这还不错,但是无论如何要保留“coi”列中的原始顺序?

【问题讨论】:

  • 不使用merge。根据帮助页面:“默认情况下,行在公共列上按字典顺序排序,但对于 sort = FALSE,顺序未指定。”
  • 对。用一个简单的 plyr::join(x,y) 解决

标签: r merge


【解决方案1】:

在这种情况下(仅匹配一个),您可以将cbindmatch 结合使用,例如:

cbind(x, y[match(x$coi, y$coi),-3])
#    coi v2 c1 c2
#1     0  7  0  0
#2     1  8 -1 -1
#3    NA  9  1 -1
#2.1   1 NA -1 -1

【讨论】:

  • 使用 cbind 和 match 的好方法。
【解决方案2】:

你可以使用类似的东西:

library(dplyr)
left_join(x, y, by = "coi")

你会得到:

  coi v2 c1 c2
1   0  7  0  0
2   1  8 -1 -1
3  NA  9  1 -1
4   1 NA -1 -1

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 1970-01-01
    • 2015-04-04
    • 2023-03-05
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多