2016-05-03 4 views
0

У меня есть набор данных с большим количеством числовых переменных и символьные переменные, которые говорят, что для этого наблюдения подавляются низкие значения. В наблюдениях, где значения не подавляются, я хочу заменить NAs 0s (только для определенных переменных), и я не могу понять это. Это мои данные:Заменить НС в соответствии с условиями

suppressed var1 var2 
     none 2 6 
     none NA 6 
     none 3 7 
     none NA NA 
     full 2 6 
     full 3 6 
     none 3 NA 
     partial NA 6 
     none 2 7 
     none NA NA 

Что я хочу сделать, это изменить NA на 0 в Var 1, если подавлено = none. Я попытался

df$Var1<-if (df$suppressed=='none'&is.na(df$Var1)) 0 
     else df$Var1 

и получил

Error in if (df$suppressed == "none" & is.na(df$Var1)) 0 else df$Var1 : 
    argument is of length zero 

там что-то не так с моим, если другим заявлением, или есть другой способ сделать это?

Вот структура моих данных:

structure(list(suppressed = structure(c(2L, 2L, 2L, 2L, 1L, 1L, 2L, 3L, 2L, 2L), .Label = c("full", "none", "partial"), class = "factor"), var1 = c(2, NA, 3, NA, 2, 3, 3, NA, 2, NA), var2 = c(6, 6, 7, NA, 6, 6, NA, 6, 7, NA)), .Names = c("suppressed", "var1", "var2"), row.names = c(NA, -10L), class = "data.frame") 
+3

Просто выполните 'df [df $ suppressed == 'none' & is.na (df $ var1)," var1 "] <- 0' –

ответ

1

ifelse() может сделать трюк. Он принимает три аргумента - условие, вывод if и вывод else.

df$Var1 <- ifelse(df$suppressed == 'none' & is.na(df$Var1), 0, Var1) 

У вас нет никаких фигурных скобок в вашем коде {}.

if(df$suppressed == 'none' & is.na(df$Var1)){ 
    df$Var1 <- 0 
    }else{ 
    df$Var1 <- df$Var1 
} 

Надеюсь, это поможет.

+0

В' ifelse нет абсолютно никакой необходимости, если у вас есть только одно условие выполнить. Зачем вам нужно помещать 'Var1' в часть * else *, если она уже существует? –

+0

Я полностью согласен, но, видя, как он пытался использовать if-statement, я хотел показать ему ifelse(). Но я не могу спорить с тобой. –

+0

Кроме того, 'df $ var1 == NA' не делает то, что, по вашему мнению, делает. Таким образом, ваш второй вариант не будет работать. –

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