假设我有下一个数据框,我想要做的是识别和删除某些观察结果。
想法是删除那些包含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
答案 0 :(得分:4)
删除所需值的另一种方法是在将数字转换为字符后,使用1111
直接过滤2222
,grep()
等。
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等值。