"неопределенные столбцы, выбранные" - при попытке снять на С ДФ в список


Я пытаюсь повторить успех этого решения:

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

Или

Удалить столбцы из фрейма данных, где некоторые из значений NA

Со списком фреймов данных:

m1<- structure(list(vPWMETRO = c(1520L, 1520L, 1520L, 1520L, 1520L), 
               vPWPUMA00 = c(500L, 900L, 1000L, 1100L, 1200L), 
               v100 = c(96.1666666666667, 71.4615384615385, 68.6363636363636, 22.5, 64.5), 
               v101 = c(5, 15, NA, NA, NA),
               v102 = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_)),
          .Names = c("vPWMETRO", "vPWPUMA00", "v100", "v101", "v102"), 
          row.names = 26:30, class = "data.frame")

m2<- structure(list(vPWMETRO = c(6440L, 6440L, 6440L, NA, NA), 
               vPWPUMA00 = c(1300L,2100L, 2200L, NA, NA), 
               v100 = c(38.3921568627451, 35, 12.5, NA, NA), 
               v101 = c(NA, NA, NA, NA, NA), 
               v102 = c(38.3333333333333, 68, NA, NA, NA)), 
               .Names = c("vPWMETRO", "vPWPUMA00", "v100", "v101", "v102"), 
          row.names = c("39", "40", "41", "NA", "NA.1"), class = "data.frame")
#views structure
str(m1)
str(m2)

#creates list
snag<- list(v1520=m1, v6440=m2)
str(snag)
#attempts lapply solution
prob1<- lapply(snag, function(y) y[ ,!is.na(y)])

#2nd attempt, same result on just dataframe:
x5$v6440[ , apply(x5$v6440, 2, function(x) !(is.na(x)))]

Таким образом, столбцы, содержащие все NA, удаляются из фрейма данных. Таким образом, результатом должен быть список из 2 df:

V1520: vPWPUMA00, v100, v101

V6440: vPWPUMA00, твердотельного накопителя V100, если, v102

I смотрите, разница в задаче примера состоит в том, что размерность равна 1x11, а мои размеры-5x5. Я предполагаю, что это вызывает ошибку "неопределенный столбец", но я не уверен.

Любая помощь или совет будут весьма признательны.

С уважением,

1 2

1 ответ:

Я не думаю, что вы смотрели на вполне правильные вопросы и ответы.

СмотритеУдаление столбцов из фрейма данных, где все значения являются NA , что, по-видимому, является тем, что вы хотите.

Затем вы можете изменить мой ответ, чтобы дать

lapply(snag, Filter, f = function(x){!all(is.na(x))})



$v1520
   vPWMETRO vPWPUMA00     v100 v101
26     1520       500 96.16667    5
27     1520       900 71.46154   15
28     1520      1000 68.63636   NA
29     1520      1100 22.50000   NA
30     1520      1200 64.50000   NA

$v6440
     vPWMETRO vPWPUMA00     v100     v102
39       6440      1300 38.39216 38.33333
40       6440      2100 35.00000 68.00000
41       6440      2200 12.50000       NA
NA         NA        NA       NA       NA
NA.1       NA        NA       NA       NA