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