根据其他列表的缺失向表中添加一行

时间:2013-02-27 09:40:12

标签: r merge

我想知道是否可以根据另一个表中缺少某个值来向表中添加额外的行。这就是我的情况如何

包含2列的文本文件

V1 V2
1  100
1  101
1  102
1  103
2  230
2  231
2  232
... ...

包含5列的其他文本文件

V1 V2 V3 V4 V5
1  100 a b c
1  101 a b c
1  103 a b c
2  231 a b c
2  232 a b c

当V1和V1的值组合时第一个文本文件的V2不存在于第二个文本文件中(在示例1 102和2 230中不存在),我想在第二个文件中添加额外的行,其值为V1和V2,来自第一个文件& V3,V4和V5等于0

这样第二个文件就像这样:

V1 V2 V3 V4 V5
1  100 a b c
1  101 a b c
1  102 0 0 0
1  103 a b c
2  230 0 0 0
2  231 a b c
2  232 a b c

我无法找到在R中执行此操作的正确命令。有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:2)

假设两个对象名为“DF1”和“DF2”,您可以使用merge,如下所示:

DFM <- merge(DF1, DF2, all = TRUE)
DFM
#   V1  V2   V3   V4   V5
# 1  1 100    a    b    c
# 2  1 101    a    b    c
# 3  1 102 <NA> <NA> <NA>
# 4  1 103    a    b    c
# 5  2 230 <NA> <NA> <NA>
# 6  2 231    a    b    c
# 7  2 232    a    b    c

如果您真的更喜欢0而不是NA,则可以执行以下操作:

# Convert the factors to characters
DFM[sapply(DFM, is.factor)] <- lapply(DFM[sapply(DFM, is.factor)], as.character)
# Identify the NA values and replace them with 0
DFM[is.na(DFM)] <- 0
DFM
#   V1  V2 V3 V4 V5
# 1  1 100  a  b  c
# 2  1 101  a  b  c
# 3  1 102  0  0  0
# 4  1 103  a  b  c
# 5  2 230  0  0  0
# 6  2 231  a  b  c
# 7  2 232  a  b  c