R中重复标识的高效子集化数据

时间:2015-01-15 08:31:37

标签: r dataframe subset

说我有以下数据并应用第一个过滤器

A <- (5:24)
B <- (10:29)
data <- data.frame(A,B)
data$C <- rep(1:((length(A)/2)))
data2 <- subset( data, B < 26)

现在我想进一步减少数据,以便只保留重复C值的情况。我使用了以下代码:

data3 <- subset(data2, (summary(as.factor(C))) == 2)

是否可以使用pmatch()或其他有效方式?

1 个答案:

答案 0 :(得分:4)

有几种可能性。

  • 您可以尝试duplicated

    subset(data2, duplicated(C) | duplicated(C, fromLast = TRUE))
    
  • 或者,您可以使用table%in%

    idx <- table(data2$C) > 1
    subset(data2, C %in% names(idx)[idx])
    
  • dplyr的解决方案:

    library(dplyr)
    data2 %>%
      group_by(C) %>%
      filter(n() > 1)
    
  • data.table的解决方案(由@akrun提出):

    library(data.table)
    setDT(data2)[data2[,.N>1, C]$V1]