子集重复值> 10

时间:2015-06-30 23:48:24

标签: r duplicates subset

我正在查看数据框并尝试将具有相同压力值的行子集超过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个或更多重复压力值并删除其他行。

3 个答案:

答案 0 :(得分:2)

尝试

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

答案 1 :(得分:2)

这是一个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]

答案 2 :(得分:0)

以下是使用基础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的名称。