2016-09-24 4 views
-1

Я пытаюсь заменить NA в одном столбце данных в R с «-999», и я вполне могу это получить.Замените NA в одной колонке таблицы данных в R

Связанный вопрос here на Stackoverflow, но я думаю, что это можно сделать без повторения через стол.

У меня есть столбец column_to_check в виде данных. Колонка является факторной переменной и имеет 80K наблюдений, состоящих из NA, 0 и 1. Я пытаюсь изменить NA на -999, чтобы я мог продолжить работу.

Код я работаю так:

is.na(DT[,column_to_check,with=FALSE]) = "-999" 

и

DT[is.na(column_to_check), column_to_check:="-999"] 

Первая строка устанавливает весь столбец в НС. Второй не работает, и я знаю, что он выключен, но я думаю, что я рядом.

Может ли кто-нибудь помочь?

Спасибо.

+0

«Я пытаюсь изменить NA на -999, чтобы я мог продолжить работу». - Если вы не экспортируете данные для использования с каким-либо другим программным обеспечением, я думаю, вы пожалеете об этом. Все функциональные возможности R предназначены для игры с NA, а не с отсутствующими кодами значений ersatz. – Frank

+0

Я согласен с Фрэнком об общем принципе. Хотя что сообщение об ошибке со второй строкой? Мне это хорошо. Есть ли у вас воспроизводимый пример? – dracodoc

+0

'data.table' может жаловаться на 2-ю строку, потому что вы пытаетесь присвоить значение символа числовому столбцу. Почему вы используете '' -999'' вместо '-999'? – dracodoc

ответ

2

Ваш код не выключен, если данные в столбце не является персонаж в этом случае вы должны установить -999 как меж/Числовой без «»

data <- read.table(header=TRUE, text=' 
id weight size 
1  20 small 
2  27 large 
3  24 medium 
') 

data <- data.table(data) 

> data[size == 'small', weight := NA] 
> data 
    size id weight 
1: small 1  NA 
2: large 2  27 
3: medium 3  24 
> is.na(data) 
     size id weight 
[1,] FALSE FALSE TRUE 
[2,] FALSE FALSE FALSE 
[3,] FALSE FALSE FALSE 
> data[is.na(weight), weight := -999] 
> data 
    size id weight 
1: small 1 -999 
2: large 2  27 
3: medium 3  24 
> data[size == 'small', weight := NA] 
> data[is.na(weight), weight := "-999"] 
Warning message: 
In `[.data.table`(data, is.na(weight), `:=`(weight, "-999")) : 
    Coerced 'character' RHS to 'integer' to match the column's type. 

EDIT: Это я просто увидел, что @dracodoc предложил в комментарии

Смежные вопросы