子集重复值 >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.
我正在查看数据框并尝试将具有相同压力值的行子集化为超过 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.