首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在数据帧中查找重复的数字序列

如何在数据帧中查找重复的数字序列
EN

Stack Overflow用户
提问于 2017-11-09 21:06:50
回答 2查看 142关注 0票数 2

假设我有下一个数据帧,我想要做的是识别和删除某些观察值。

这个想法是删除那些具有4个或更多相似数字的观测值。

代码语言:javascript
复制
df<-data.frame(col1=c(12,34,233,3333,3333333,333333,555555,543,456,87,4,111111,1111111111,22,222,2222,22222,9111111,912,8688888888))

         col1
1          12
2          34
3         233
4        3333
5     3333333
6      333333
7      555555
8         543
9         456
10         87
11          4
12     111111
13 1111111111
14         22
15        222
16       2222
17      22222
18    9111111
19        912
20 8688888888

因此,最终输出应该是:

代码语言:javascript
复制
   col1
1    12
2    34
3   233
4   543
5   456
6    87
7     4
8    22
9   222
10  912
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-09 21:26:24

删除所需值的另一种方法是直接过滤11112222等,在将数字转换为字符后使用grep()

代码语言:javascript
复制
df$col1[-as.numeric(grep(paste(1111*(1:9), collapse="|"), as.character(df$col1), value=F))]
# [1]  12  34 233 543 456  87   4  22 222 912
票数 4
EN

Stack Overflow用户

发布于 2017-11-09 21:11:03

不是最有效的方法,但它似乎返回了所需的结果。将向量转换为字符串,拆分每个单独的字符,使用rle查找重复序列,取最大值,如果最大值小于4,则返回TRUE。

代码语言:javascript
复制
df[sapply(strsplit(as.character(df$col1), ""),
          function(x) max(rle(x)$lengths) < 4), , drop=FALSE]
   col1
1    12
2    34
3   233
8   543
9   456
10   87
11    4
14   22
15  222
19  912

此方法将包括诸如155155之类的值,但不包括诸如555511或155551之类的值。

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

https://stackoverflow.com/questions/47202645

复制
相关文章

相似问题

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