R 中具有重复身份的高效子集数据

Efficient subseting data with repeated identities in R

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

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()或其他有效方式?

有几种可能性。

  • 你可以试试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]