Один из вариантов будет filter_at
, чтобы выбрать интересующие столбцы, проверьте, есть ли у какой-либо из переменных substr
, 401 в начале для фильтрации строк
library(dplyr)
df1 %>%
filter_at(vars(starts_with("dx")), any_vars(substr(., 1, 3) == '401'))
# id dx_1 dx_2 dx_3 dx_n
#1 1 401 NA NA NA
#2 2 2500 4011 NA NA
Илииспользуя base R
, переберите интересующие вас столбцы (в данном случае все столбцы, кроме первого), используйте grepl
и проверьте, есть ли pattern
"^ 401" или нет - возвращает list
излогические vector
s, которые мы Reduce
к одному логическому vector
с |
, используем для подстановки строк данных
df1[Reduce(`|`, lapply(df1[-1], grepl, pattern = "^401")), ]
Относительно проблемы в операцияхpost
final_DB[apply(grep(paste("^", i, sep=""), final_DB[,10:29]), 1, any),]
Здесь grep
применяется к data.frame вместо vector
и grep
работает на vector/matrices
.Чтобы исправить это, мы перебираем строки (хотя было бы неэффективно - просто исправить код)
i1 <- apply(final_DB[, 10:29], 1, function(x) any(grepl(paste("^", i, sep=""), x)))
data
df1 <- structure(list(id = 1:3, dx_1 = c(401L, 2500L, 18524L), dx_2 = c(NA,
4011L, NA), dx_3 = c(NA, NA, NA), dx_n = c(NA, NA, NA)),
class = "data.frame", row.names = c(NA, -3L))