Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在数据帧中找到重复的数字序列_R_Dataframe_Sequence - Fatal编程技术网

R 如何在数据帧中找到重复的数字序列

R 如何在数据帧中找到重复的数字序列,r,dataframe,sequence,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

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

我们的想法是删除那些具有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

虽然不是最有效的方法,但它似乎返回了期望的结果。将向量转换为字符串,拆分每个字符,使用
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
df[sapply(strsplit)(如.character(df$col1),“”),
函数(x)最大值(rle(x)$长度)<4,drop=FALSE]
可乐
1    12
2    34
3   233
8   543
9   456
10   87
11    4
14   22
15  222
19  912

此方法将包括像155155这样的值,但不包括像555511或155551这样的值。

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

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

为什么不是简单的
表格
而不是
rle
?我想这取决于OP想要的是一个数字的总数还是重复序列(例如155155)。我选择了后者,但是
表格
(或
表格
)对于前者的解释会更好。澄清点:155155应该被包括还是被排除?应该被包括构建一个正则表达式。好电话。请注意,
grep
有一个倒过来的参数,可以用来代替
-
。另外,
grepl
在这里是一个自然的替代品。为了好玩,这里有一个替代品:
df$col1[!grepl(paste0((1:9),“{4}”,collapse=“|”)as.character(df$col1))]
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