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]
假设我有以下数据并应用第一个过滤器
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]