Замените NA в определенном столбце @data в списке SpatialPolygonsDataFrame.

У меня есть большой список из 65 SpatialPolygonDataFrames с именем map_years. Мне нужно заменить NA нулями в столбце в слоте @data в SPDF в этом списке.

Я могу вызвать этот столбец, выполнив следующие действия:

> map_years[["map1951"]]@data$CATCH
  [1]       NA   642.11       NA       NA       NA       NA       NA     0.00   281.65

И я могу получить список, какие из них являются NA, выполнив следующие действия:

> is.na(map_years[["map1951"]]@data$CATCH)
  [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE

Но я не могу понять, как заменить эти NA. Следующее не работает :( -

[1] map_years[is.na(map_years[["map1950"]]@data$CATCH)] <- 0
[2] map_years[[is.na(map_years[["map1950"]]@data$CATCH)]] <- 0
[3] map_years[["map1950"]]@data[is.na(map_years[["map1950"]]@data$CATCH)] <- 0

Вот скриншот структуры этого списка:

скриншот структуры данных

Изменить: я просто работаю с немного измененной версией набора данных maptools wrld_simpl, поэтому любые примеры редактирования столбца @data в наборе данных data(wrld_simpl) работают.


r sp
person spops    schedule 05.02.2018    source источник
comment
Попробуйте map_years[["map1951"]]@data$CATCH[is.na(map_years[["map1951"]]@data$CATCH)] <- 0 `   -  person www    schedule 06.02.2018
comment
Да спасибо! Я перестал постоянно возиться с [] @ $ и т. Д. Если вы добавите ответ, я отмечу его как правильный.   -  person spops    schedule 06.02.2018
comment
Спасибо. Пожалуйста, смотрите мой пост.   -  person www    schedule 06.02.2018


Ответы (1)


Поскольку map_years[["map1951"]]@data$CATCH является вектором, мы можем использовать ту же технику для замены значений в векторе следующим образом.

map_years[["map1951"]]@data$CATCH[is.na(map_years[["map1951"]]@data$CATCH)] <- 0

Кроме того, приведенный выше код можно упростить следующим образом. Это еще один способ доступа к столбцу в SpatialPolygonDataFrames, так как доступ к слоту data упрощен.

map_years[["map1951"]]$CATCH[is.na(map_years[["map1951"]]$CATCH)] <- 0
person www    schedule 06.02.2018