Удаление столбцов с NA в списке фреймов данных

#r #list #na

#r #Список #na

Вопрос:

Рассмотрим большой список фреймов данных, вызываемых GEER там, где некоторые столбцы содержат только NA . В R, как я могу удалить все столбцы, относящиеся NA ко всем элементам.

* Не все элементы содержат элементы, включая NA s.

 > GEER
$ ch_0  :'data.frame': 74 obs. of  6000 variables:
..$ TIME  : Factor w/ 527 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "XTC_R" "DCC_S" "HG_CC" ...
..$ K_207  : num [1:100] 10.7 18.5 18.7 10.3 62.6 ...
..$ K_220  : num [1:100] 33.2 70.6 13.5 13.7 15.5 ...
..$ M_220  : num [1:100] 10.3 18.04 18.3 9.7 5.7 ...
..$ M_207  : num [1:100] 4.8 4.5 4.0 6.5 5.1 ...
$ ch_1290  :'data.frame':  380 obs. of  6000 variables:
..$ TIME  : Factor w/ 150 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "KTC_D" "DSC_C" "KL_SC" ...
..$ K_507  : num [1:100] 10.7 18.5 18.7 10.3 12.6 ...
..$ K_444  : num [1:100] NA NA NA NA NA ...
..$ M_513  : num [1:100] NA NA NA NA NA ...
..$ M_102  : num [1:100] NA NA NA NA NA ...
..$ K_505  : num [1:100] 14.0 18.3 14.7 11.2 12.6 ...
 

Выводом желания будет:

 > GEER_out
$ ch_0  :'data.frame': 74 obs. of  6000 variables:
..$ TIME  : Factor w/ 527 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "XTC_R" "DCC_S" "HG_CC" ...
..$ K_207  : num [1:100] 10.7 18.5 18.7 10.3 62.6 ...
..$ K_220  : num [1:100] 33.2 70.6 13.5 13.7 15.5 ...
..$ M_220  : num [1:100] 10.3 18.04 18.3 9.7 5.7 ...
..$ M_207  : num [1:100] 4.8 4.5 4.0 6.5 5.1 ...
$ ch_1290  :'data.frame':  380 obs. of  5997 variables:
..$ TIME  : Factor w/ 150 levels "2020-01" "2020-03" "2020-04" ...
..$ NAME  : Factor w/ 100 levels "KTC_D" "DSC_C" "KL_SC" ...
..$ K_507  : num [1:100] 10.7 18.5 18.7 10.3 12.6 ...
..$ K_505  : num [1:100] 14.0 18.3 14.7 11.2 12.6 ...
 

Я ценю любое предложение.

Ответ №1:

Вы можете использовать remove_empty из пакета janitor :

 library(janitor)

lapply(GEER, janitor::remove_empty, which = "cols")
 

Ответ №2:

В base R мы можем использовать Filter с lapply

 lapply(GEER, function(dat) Filter(function(x) any(!is.na(x)), dat))