虽然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()
两个数据框,删除了重复的行(具有相同的行名)?
答案 0 :(得分:4)
怎么样
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)找到匹配的数值或逻辑值。
答案 1 :(得分:0)
如果我正确理解了您的要求,那么可以在一行代码中以一种简洁的好方法进行操作:
unique(rbind(bar, foo))
# a b
# x 2 6
# z 4 8
# w 1 5
# y 3 7