【问题标题】:R: Merging data frames: Exclude specific column value, but keep skipped rowsR:合并数据框:排除特定列值,但保留跳过的行
【发布时间】:2016-05-21 14:44:48
【问题描述】:

我想合并两个数据框,根据特定列值跳过行,但仍将跳过的行保留在最终合并的数据框中。我可以管理第一部分(跳过),但不能管理第二部分。

以下是数据框:

# Data frame 1 values
ids1 <- c(1:3)
x1 <- c(100, 101, 102)
doNotMerge <- c(1, 0, 0)

# Data frame 2 values
ids2 <- c(1:3)
x2 <- c(200, 201, 202)

# Creating the data frames
df1 <- as.data.frame(matrix(c(ids1, x1, doNotMerge),
                            nrow = 3,
                            ncol = 3,
                            dimnames = list(c(),c("ID", "X1", "DoNotMerge"))))

df2 <- as.data.frame(matrix(c(ids2, x2),
                            nrow = 3,
                            ncol = 2,
                            dimnames = list(c(),c("ID", "X2"))))

# df1 contents:
#   ID  X1 DoNotMerge
# 1  1 100          1
# 2  2 101          0
# 3  3 102          0

# df2 contents:
#   ID  X2
# 1  1 200
# 2  2 201
# 3  3 202

我用merge:

merged <- merge(df1[df1$DoNotMerge != 1,], df2, by = "ID", all = T)

# merged contents:
#   ID  X1 DoNotMerge  X2
# 1  1  NA         NA 200
# 2  2 101          0 201
# 3  3 102          0 202

我能够做到的跳过部分,但我真正想要的是保持df1 行与DoNotMerge == 1 相同,如下所示:

#   ID  X1 DoNotMerge  X2
# 1  1  NA         NA 200
# 2  1 100          1  NA
# 3  2 101          0 201
# 4  3 102          0 202

有人可以帮忙吗?谢谢。

【问题讨论】:

标签: r dataframe merge subset


【解决方案1】:

更新:我实际上在写问题时找到了解决方案(遇到this question),所以我想我会发布它以防其他人遇到这个问题:

require(plyr)
rbind.fill(merged, df1[df1$DoNotMerge == 1,])

# Result:
#  ID  X1 DoNotMerge  X2
# 1  1  NA         NA 200
# 2  2 101          0 201
# 3  3 102          0 202
# 4  1 100          1  NA

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 2017-12-24
    • 2022-01-18
    • 2022-01-25
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多