子集重复值 >10

Subset Duplicated Values >10

我正在查看数据框并尝试将具有相同压力值的行子集化为超过 5 行或删除没有 5 个重复压力值的行...

File    Turbidity   Pressure
 1      3.2         46
 2      3.4         46
 3      5.4         46
 4      3.2         46
 5      3.1         46
 6      2.3         46
 7      2.3         45
 8      4.5         45
 9      2.3         45
 10     3.2         44
 11     4.5         44
 12     6.5         43
 13     3.2         42
 14     3.1         41
 15     1.2         41
 16     2.3         41
 17     2.4         41
 18     2.1         41
 19     1.4         41
 25     1.3         41

所以基本上是尝试保留压力为 46 和 41 的行并删除中间的行。这是我的数据集的一小部分,只需要基本上保留具有 5 个或更多重复压力值的行并删除其他行的代码。

尝试

library(dplyr)
df %>% group_by(Pressure) %>% filter(n() >= 5)

给出:

#Source: local data frame [13 x 3]
#Groups: Pressure
#
#   File Turbidity Pressure
#1     1       3.2       46
#2     2       3.4       46
#3     3       5.4       46
#4     4       3.2       46
#5     5       3.1       46
#6     6       2.3       46
#7    14       3.1       41
#8    15       1.2       41
#9    16       2.3       41
#10   17       2.4       41
#11   18       2.1       41
#12   19       1.4       41
#13   25       1.3       41

这里有一个 data.table 解决方案(关键在于压力不会在以后重复):

library(data.table)
setDT(df)[,if(.N>=5) .SD,by=Pressure]

附录:

如果您希望 Pressure 值稍后重复,例如:

df<-data.frame(File=c(1:19,25:28),
           Pressure=rep(c(46:41,46),c(6,3,2,1,1,7,3)))

然后您需要使用 rleid 以仅保持至少 5 个 的组连续 (无间隙):

setDT(df)[,ct:=rleid(Pressure)][,if (.N>=5) .SD,by=ct]

这是一个使用 base R 的解决方案:

df <- data.frame(id=1:10, Pressure=c(rep(1,5),6:10))
p.counts <- table(df[,"Pressure"])
good.pressures <- as.numeric(names(p.counts))[p.counts>=5]
df.sub <- df[df[,"Pressure"]%in%good.pressures,]

请注意,我使用 df 作为示例数据集,因此您可以删除第一行代码并将 df 的所有实例替换为您的 data.frame.