заменить пропущенные значения на основе условия, оцененного сгруппированными данными - PullRequest
0 голосов
/ 11 мая 2019

У меня большой массив данных со столбцами Year, Exporter, Importer и TradeValue.

Столбец Year содержит целые числа, представляющие годы (1970-2010).Столбцы Exporter и Importer содержат символьные строки, представляющие около 150 стран («США», «CAN», «GBR» и т. Д.).Столбец TradeValue содержит смесь чисел и NA.

Для каждой страны-экспортера в каждом году я хочу заменить все NA для TradeValue на ноль, но только если есть хотя бы одна строка, которая имеет значение не-NA для TradeValue (для этого экспортера в этом году).

Любая помощь приветствуется.

Отредактировано:

> dput(head(df))

structure(list(Year = c(1970L, 1970L, 1970L, 1970L, 1970L, 1970L
), Exporter = c("Afghanistan", "Afghanistan", "Afghanistan", 
"Afghanistan", "Afghanistan", "Afghanistan"), Importer = 
c("Afghanistan", 
"Albania", "Algeria", "American Samoa", "Andorra", "Angola"), 
TradeValue = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_)), row.names = c("1", "2", "3", "4", "5", "6"), class = 
"data.frame")

1 Ответ

1 голос
/ 11 мая 2019

Используя dplyr, вы можете group_by Year и Exporter, заменить NA на 0, если в группе any не-NA TradeValue.

library(dplyr)

df %>%
  group_by(Year, Exporter) %>%
  mutate(TradeValue = if (any(!is.na(TradeValue))) 
                      replace(TradeValue, is.na(TradeValue), 0) else TradeValue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...