【问题标题】:Merging two datasets only by first row in R [duplicate]仅按R中的第一行合并两个数据集[重复]
【发布时间】:2017-12-27 16:37:16
【问题描述】:

我需要合并两个数据集,但是在第二个中,可能有重复的 id,例如 1,1,1 的几个 id。如果有重复的id,如何合并到它们的第一行?

为了更清楚,这里有一个可重现的例子:

df1
structure(list(id = 1:2, y = 10:11), .Names = c("id", "y"), class = "data.frame", row.names = c(NA, 
-2L))

df2
structure(list(id = c(1L, 1L, 1L, 2L), x1 = 435:438, x2 = c(435L, 
436L, 436L, 438L), x3 = c(435L, 436L, 436L, 438L)), .Names = c("id", 
"x1", "x2", "x3"), class = "data.frame", row.names = c(NA, -4L
))

示例:在输出中我期望这种格式

id  y   x1  x2  x3
1   10  435 435 435
2   11  438 438 438

I.E. 2 行和 3 行(1 个 id)不参与合并。

【问题讨论】:

    标签: r merge


    【解决方案1】:

    您可以使用data.table 进行操作。您只能保留第二个数据集中的 id == 1 的第一次出现,然后是两个数据集中的 merge

    解决办法如下:

    library(data.table)
    setDT(df2)
    df2[, idx := 1:.N, by = id]
    df2 <- df2[idx == 1, ]
    df2[, idx := NULL]
    output <- merge(df1, df2, by = "id")
    output
    

    它会给你你想要的输出:

     id  y  x1  x2  x3
    1  1 10 435 435 435
    2  2 11 438 438 438
    

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      相关资源
      最近更新 更多