Как создать числовую переменную с NA или числом в зависимости от другой переменной в кадре данных R - PullRequest
2 голосов
/ 02 мая 2019

У меня есть фрейм данных (df) с тремя числовыми переменными (New, Middle, Old).Мне нужно рассчитать разницу между новым и средним (Diff1) и между новым и старым (Diff2).Если средний балл равен NA, оба балла различия должны быть NA.Оценка различий будет помещена в новую переменную

Разница 1 проста.DIFF1 <- Новый - Средний Всегда дает правильный ответ. </p>

Разница 2 работает правильно, когда (1) присутствует средний балл, или средний балл равен NA, а новый или самый старый балл также равен NA.

Когда средний балл равен NA, и присутствуют самые старые и самые новые баллы, разница 2 всегда числовая.Я не могу получить разницу 2, чтобы быть NA.

Я перепробовал все варианты именования переменных (например, df $ New) и скобок, о которых я могу думать, но безуспешно.Я также попытался использовать == и = вместо <-.Я также проверил (используя Rcmdr), что переменные, которые я считаю NA, на самом деле являются NA. </p>

IN DATA

Old     Middle      New     
2483        NA      585     

CODE

Ifelse (is.na(df[,"Middle"]),   
       (df[,"Diff2"] <- NA ),  
       (df[,"Diff2"] <- with(df,New - Old)))  

ACTUAL OUT DATA

Diff1(New – Middle) Diff2(New – Old)  
NA                  -1898  

желаемые выходные данные

Diff1(New – Middle) Diff2(New – Old)
NA                  NA

1 Ответ

0 голосов
/ 02 мая 2019

Мы можем изменить код в ifelse на

df$Diff2 <- with(df, ifelse(is.na(Middle), NA_real_, New - Old))

Обратите внимание, что назначения (<-) в пределах ifelse заменены (не будут работать) на одинназначение

...