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

时间:2017-11-09 13:06:50

标签: r dataframe sequence

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

想法是删除那些包含4个或更多相似数字的观察结果。

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

所以最终的输出应该是:

   col1
1    12
2    34
3   233
4   543
5   456
6    87
7     4
8    22
9   222
10  912

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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等值。