我在R.中有一个问题 我有一个问题的以下示例代码。
> exdata <- data.frame(a = rep(1:4, each = 3),
+ b = c(1, 1, 2, 4, 5, 3, 3, 2, 3, 9, 9, 9))
> exdata
a b
1 1 1
2 1 1
3 1 2
4 2 4
5 2 5
6 2 3
7 3 3
8 3 2
9 3 3
10 4 9
11 4 9
12 4 9
> exdata[duplicated(exdata), ]
a b
2 1 1
9 3 3
11 4 9
12 4 9
我尝试使用duplicated()
函数查找exdata
数据框中的所有重复记录,但它只找到重复记录的一部分,因此很难直观地确认是否存在重复记录。
我正在寻找能够返回以下结果的解决方案
a b
1 1 1
2 1 1
7 3 3
9 3 3
10 4 9
11 4 9
12 4 9
可以使用duplicated()
功能找到正确的解决方案吗?
或者有没有办法使用其他功能?
我很感激你的帮助。
答案 0 :(得分:3)
duplicated
返回一个逻辑向量,其长度等于其参数的长度,对应于第二次存在一个值。它有一个数据框的方法duplicated.data.frame
,它查找重复的行(因此有一个长度为nrow(exdata)
的逻辑向量。使用它作为逻辑向量的提取将准确返回那些行曾经发生过一次。然而,它不会返回那些行的第一次出现。
查看您使用的索引向量:
duplicated(exdata)
# [1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE
但您可以将其与fromLast = TRUE
结合使用以获取这些行的所有匹配项:
exdata[duplicated(exdata) | duplicated(exdata, fromLast = TRUE),]
# a b
# 1 1 1
# 2 1 1
# 7 3 3
# 9 3 3
# 10 4 9
# 11 4 9
# 12 4 9
查看duplicated(exdata, fromLast = TRUE)
的逻辑向量,以及与duplicated(exdata)
的组合来说服自己:
duplicated(exdata, fromLast = TRUE)
# [1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE
duplicated(exdata) | duplicated(exdata, fromLast = TRUE)
# [1] TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE