R:合并数据框:排除特定列值,但保留跳过的行

时间:2016-05-21 14:44:48

标签: r dataframe merge subset

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

以下是数据框:

# 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

有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分: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