как исключить элемент (dataframe) из списка в R, если он содержит определенное слово

У меня есть датафрейм. Я делю этот фрейм данных на подфреймы по 6 строк в списке. Я хочу, если внутри этих подфреймов существует слово #ERROR, чтобы удалить все кадры данных (которые содержат даже в одной строке определенное слово) и получить список с меньшим количеством кадров данных. Затем я собираюсь снова преобразовать список в dataframe. Моя проблема в том, что я пробую разные коды и не могу понять, как исключить подкадр данных с определенным словом из списка.

Я пытаюсь следовать

a<-dataset 
View(a)
my.list<-split(a, rep(1:119, each = 6)) 

z=lapply(1:length(my.list), function(i) my.list[[i]] != "#ERROR")

но то, что я получаю, это 119 элементов ИСТИНА ЛОЖЬ. Но я хочу устранить эти ложные... кто-нибудь, пожалуйста, помогите....


person Adam    schedule 30.06.2020    source источник
comment
Что, если вы сделаете my.list[sapply(1:length(my.list), function(i) my.list[[i]] != "#ERROR")]?   -  person Allan Cameron    schedule 01.07.2020
comment
Работает только для элементов от 1 до 12... от 13-го элемента до 119, возвращающего Null... путем проверки данных не так много #ERROR   -  person Adam    schedule 01.07.2020


Ответы (1)


Попробуйте использовать sapply, так как он вернет вектор вместо списка, такого как lapply.

new.list <- my.list[sapply(1:length(my.list), function(i) 
                           all(my.list[[i]] != "#ERROR"))]

Или немного упростить с помощью Filter :

new.list <- Filter(function(x) all(x != "#ERROR"), my.list)
person Ronak Shah    schedule 01.07.2020
comment
Вроде работает спасибо, но что-то странное. Исключите также ряды с NA. В начале я принимаю NA ... и я хотел удалить только строки с #ERROR. Зачем исключать также строки с NA? Очень странно, может быть есть какие-то пояснения и как исправить?Спасибо - person Adam; 01.07.2020
comment
@Adam Да, потому что NA по сравнению со строкой возвращает NA, см. NA != 'A'. Попробуйте Filter(function(x) all(x != "#ERROR" | is.na(x)), my.list) - person Ronak Shah; 01.07.2020