Не заменяйте NA на 0 при извлечении данных из BEA API
Когда я использую приведенный ниже код для получения данных BEA, я получаю данные по моей уценке R. Тем не менее, он конвертирует все NA в ноль и дает мне сообщение, что "NA введены путем принуждения". Как я могу убедиться, что НС остаются НС и не превращаются в нули.
beaPCI <- list(
'UserID' = beaKey ,
'Method' = 'GetData',
'datasetname' = 'RegionalIncome',
'TableName' = 'CA1' ,
'LineCode' = '3',
'Year' = '1992, 1996, 2000, 2004, 2008, 2012' ,
'GeoFips' = 'COUNTY' ,
'ResultFormat' = 'json'
);
beaPCI <- beaGet(beaPCI)
1 ответ
Я вижу, что это около года, но до сих пор нет ответов. У меня был этот вопрос сам, поэтому я решил заняться спором. Хотя я всего лишь промежуточный пользователь R, я думаю, что нашел ответ, если вы или кто-то еще заинтересован.
Часть "NA, введенная с помощью принуждения" происходит независимо от приведения NA к 0. Оба не связаны. Однако значения NA в данных действительно преобразуются в 0. Но это было сделано намеренно. В коде пакета в процессе преобразования данных в формат data.table это происходит:
#A weird fix to push NA values down to bottom for reshaping
beaTab[, DataValue := ifelse(is.na(DataValue), 0, DataValue)]
Похоже, что это было сделано в качестве обходного пути к некоторой проблеме, с которой столкнулся автор. Таким образом, значения NA изменяются на 0 и никогда не изменяются обратно. Я просмотрел код и похоже, что это делается только при преобразовании в data.table. Поэтому захват данных и их экспорт в виде списка не используют один и тот же метод.
Код для получения результатов в списке:
beaGet(beaPCI, asTable = F, asList = T)
Вы должны включить оба варианта. Если вы сделаете это, значения NA останутся NA. Данные все еще должны быть изменены, если вы используете этот метод, хотя.
Лично я бы просто преобразовал нули обратно в NA и сэкономил время. Мы знаем, что в этом случае ни один из данных не может быть нулевым.