У меня есть кадр данных, содержащий несколько векторов, содержащих строки, которые я хотел бы удалить, строки, содержащие определенную строку.Удалить строки, содержащие строку в любом векторе в кадре данных
df <- data.frame(id=seq(1:10),
foo=runif(10),
sapply(letters[1:5],function(x) {sample(letters,10,T)}),
bar=runif(10))
Это может быть сделано на одном векторе, указав имя вектора, т.е.
df <- df[!grepl("b", df$a),]
, который можно затем повторить указания каждого вектора, например,
df <- df[!grepl("b", df$b),]
df <- df[!grepl("b", df$c),]
df <- df[!grepl("b", df$d),]
df <- df[!grepl("b", df$e),]
, но возможно ли это сделать в одной строке без указания каких столбцов содержать строку? Что-то вроде:
df <- df[!grepl("b", df),]
Я нашел отрицая индексирует немного опасный подход, так как он будет возвращает пустой data.frame, если совпадений нет. Например, 'df [-which (df ==" ab ", arr.ind = TRUE) [, 1],]'. Вот почему я предпочитаю «grepl' над« grep » –
Согласен. Ваше предложение лучше. – RHertel
Пожалуйста, не стесняйтесь добавить его к ответу –