Мне нужно удалить все строки, у которых менее 6 подчеркиваний в значении

Мои данные

id var1                            var2
1  procedures_1_1_5___240          TRUE
2  procedures___6                  TRUE
3  procedures_1_20_1___2130        TRUE
4  procedures_1_1___2              TRUE

Мой желаемый результат

id var1                            var2
1  procedures_1_1_5___240          TRUE
3  procedures_1_20_1___2130        TRUE
r
2
Andres Mora 11 Окт 2021 в 20:54

3 ответа

Лучший ответ

Мы можем использовать str_count для 'var1', чтобы найти количество строк '_' и filter, в которых счетчик больше или равен 6

library(dplyr)
library(stringr)
df1 %>% 
   filter(str_count(var1, "_") >= 6)

-вывод

  id                     var1 var2
1  1   procedures_1_1_5___240 TRUE
2  3 procedures_1_20_1___2130 TRUE

Данные

df1 <- structure(list(id = 1:4, var1 = c("procedures_1_1_5___240", 
"procedures___6", 
"procedures_1_20_1___2130", "procedures_1_1___2"), var2 = c(TRUE, 
TRUE, TRUE, TRUE)), class = "data.frame", row.names = c(NA, -4L
))
2
akrun 11 Окт 2021 в 17:55

В базе R вы могли:

subset(df1, nchar(gsub('[^_]', '', var1)) >= 6)

  id                     var1 var2
1  1   procedures_1_1_5___240 TRUE
3  3 procedures_1_20_1___2130 TRUE
3
Onyambu 11 Окт 2021 в 18:09

Base R: вот альтернатива использования lengths с regmatches и gregexpr из base R:

df1[lengths(regmatches(df1$var1, gregexpr("_", df1$var1))) >=6,]
  id                     var1 var2
1  1   procedures_1_1_5___240 TRUE
2  3 procedures_1_20_1___2130 TRUE
2
TarJae 11 Окт 2021 в 18:37