2016-04-03 6 views
1

Позвольте мне иметь список (list1), который состоит из фреймов данных (df1, df2, ..dfn), где каждый кадр данных имеет разное количество столбцов.Удаление строк, где все элементы отсутствуют. Из списка-R

Пусть list1[[1]]:

df1: 

indx v1 v2 
1  23 45 
2  NA 34 
3  NA NA 
4  NA NA 
5  56 NA 

и

df2: 

indx v9 v6 
1  5 15 
2  11 78 
3  16 NA 
4  NA NA 
5  NA 8 

Я хочу удалить строки, где все elemetns строк (за исключением INDX строки) являются NA.

Так Ouput должно быть (песни2)

list2[[1]]:

df1: 

indx v1 v2 
1  23 45 
2  NA 34 
5  56 NA 

и

df2: 

indx v9 v6 
1  5 15 
2  11 78 
3  16 NA 
5  NA 8 

Как я могу сделать это с помощью R? Я буду очень рад за любую помощь. Большое спасибо.

ответ

2

Мы можем петля над list с lapply, получить rowSums на логической матрице (!is.na(x[-1])), преобразовать в логический вектор, проверяя элементы не равны 0, и использовать его для подмножества строк.

lapply(list1, function(x) x[!!rowSums(!is.na(x[-1])),]) 
#$df1 
# indx v1 v2 
#1 1 23 45 
#2 2 NA 34 
#5 5 56 NA 

#$df2 
# indx v9 v6 
#1 1 5 15 
#2 2 11 78 
#3 3 16 NA 
#5 5 NA 8 
Смежные вопросы