获取具有多个相同值的行

时间:2014-10-30 18:40:06

标签: r

我的R数据框看起来像这样:

A    B          C
14   apple      45
14   bannaa     23
15   car        234
16   door       12
16   ear        325

如您所见,重复了14和16。我想要:

A    B          C
14   apple      45
14   bannaa     23
16   door       12
16   ear        325

到目前为止,我有table(DF$A) > 1,但是如何/最简单的方法来做我想做的事情?

3 个答案:

答案 0 :(得分:2)

这是另一种可能的基础R解决方案

indx <- with(df, ave(A, A, FUN = length))
df[indx > 1, ]
#    A      B   C
# 1 14  apple  45
# 2 14 bannaa  23
# 4 16   door  12
# 5 16    ear 325

或使用data.table

library(data.table)
setDT(df)[, .SD[.N > 1], by = A]
#     A      B   C
# 1: 14  apple  45
# 2: 14 bannaa  23
# 3: 16   door  12
# 4: 16    ear 325

setDT(df)[, if(.N > 1) .SD, by = A]

最后,使用rle

的奖金解决方案
## df <- df[order(df$A), ] # If the data isn't sorted by `A`, you''ll need to sort it first
indx <- rle(df$A)$lengths 
df[rep(indx > 1, indx), ]
#    A      B   C
# 1 14  apple  45
# 2 14 bannaa  23
# 4 16   door  12
# 5 16    ear 325

答案 1 :(得分:1)

indx <- duplicated(df[,"A"])|duplicated(df[,"A"],fromLast=TRUE)
df[indx,]
#   A      B   C
#1 14  apple  45
#2 14 bannaa  23
#4 16   door  12
#5 16    ear 325

答案 2 :(得分:1)

既然您已经开始采用不同的方法,那么您可以通过以下方式完成它:

x <- table(df$A)
df[df$A %in% names(x[x>1]),]
#   A      B   C
#1 14  apple  45
#2 14 bannaa  23
#4 16   door  12
#5 16    ear 325

这使用names(x)为您提供列A的唯一值的事实,您可以使用names(x[x>1])将所有值出现在所有这些值中。

如果您已熟悉dplyr,另一个选项是:

require(dplyr)
df %>% group_by(A) %>% filter(n() > 1)