首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子集重复值>10

子集重复值>10
EN

Stack Overflow用户
提问于 2015-06-30 23:48:24
回答 3查看 178关注 0票数 2

我正在查看一个数据框架,并尝试将具有相同压力值的行子集到5行以上,或者删除没有5个重复压力值的行.

代码语言:javascript
运行
复制
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或更多重复压力值行,并删除其他。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-30 23:51:22

试一试

代码语言:javascript
运行
复制
library(dplyr)
df %>% group_by(Pressure) %>% filter(n() >= 5)

这意味着:

代码语言:javascript
运行
复制
#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
票数 2
EN

Stack Overflow用户

发布于 2015-07-01 00:14:01

这里有一个data.table解决方案(关键是依赖于压力,而不是在后面重复):

代码语言:javascript
运行
复制
library(data.table)
setDT(df)[,if(.N>=5) .SD,by=Pressure]

增编:

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

代码语言:javascript
运行
复制
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组组保持为一行(没有空白):

代码语言:javascript
运行
复制
setDT(df)[,ct:=rleid(Pressure)][,if (.N>=5) .SD,by=ct]
票数 2
EN

Stack Overflow用户

发布于 2015-07-01 00:33:02

下面是一个使用基本R的解决方案:

代码语言:javascript
运行
复制
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的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31150390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档