4

虽然在 a 中允许重复的行(和列)名称,但在 a 中不允许matrix它们data.frame。尝试rbind()一些具有共同行名的数据框突出了这个问题。考虑以下两个数据框:

foo = data.frame(a=1:3, b=5:7)
rownames(foo)=c("w","x","y")
bar = data.frame(a=c(2,4), b=c(6,8))
rownames(bar)=c("x","z")
# foo               bar
#   a b               a b
# w 1 5             x 2 6
# x 2 6             y 4 8
# y 3 7

现在尝试rbind()他们(注意行名):

rbind(foo, bar)
#    a b
# w  1 5
# x  2 6
# y  3 7
# x1 2 6
# z  4 8

但是对于以下情况matrix

rbind(as.matrix(foo), as.matrix(bar))
#   a b
# w 1 5
# x 2 6
# y 3 7
# x 2 6
# z 4 8

这是问题:如何rbind()删除两个数据框,删除重复的行(具有相同的行名)?

4

2 回答 2

6

怎么样

duprows <- which(!is.na(match(rownames(bar),rownames(foo))))
rbind(foo,bar[-duprows,])

?

或者(根据下面的评论)

duprows <- rownames(bar) %in% rownames(foo)
rbind(foo, bar[!duprows,])

根据(1)选择的匹配或不匹配,可能有几种变化;(2) 为匹配找到数值或逻辑值。

于 2012-10-23T20:13:33.217 回答
3

如果我正确理解您所追求的,那么在一行代码中可以使用一种简洁明了的方式来执行此操作:

unique(rbind(bar, foo))
#   a b
# x 2 6
# z 4 8
# w 1 5
# y 3 7
于 2019-09-16T17:51:52.067 回答