r - how to deal with missing value in if else statement? -
i have dataframe, mydata, constructed follows:
col1<-c(8.20e+07, 1.75e+08, na, 4.80e+07, 3.40e+07, na, 5.60e+07, 3.00e+06 ) col2<-c(1960,1960,1965,1986,1960 ,1969,1960,1993) col3<-c ( na,2.190,na,na, 5.000, na, 1.700,4.220) mydata<-data.frame(col1,col2,col3) mydata # col1 col2 col3 # 1 8.20e+07 1960 na # 2 1.75e+08 1960 2.19 # 3 na 1965 na # 4 4.80e+07 1986 na # 5 3.40e+07 1960 5.00 # 6 na 1969 na # 7 5.60e+07 1960 1.70 # 8 3.00e+06 1993 4.22
i want create col4
has values "a", "b" , "c"
, if col1
smaller 4.00e+07, col4=="a"
; if col1
not less 4.00e+07, col4=="b"
, else col4=="c
"
here code:
col4 <-ifelse(col1<4.00e+07, "a", ifelse(col1 >=4.00e+07, "b", ifelse(is.na(col1 =4.00e+07), "b", "c" )))
but evaluates to:
# [1] "b" "b" na "b" "a" na "b" "a"
it doesn't change na value in col1 "c".
the outcome should be:
# [1] "b" "b" "c" "b" "a" "c" "b" "a"
what problem in code? suggestion appreciated!
you have check is.na
first, because na < 4.00e+07
results in na
. if first argument of ifelse()
na
, result na
well:
ifelse(c(na, true, false), "t", "f") ## [1] na "t" "f"
as can see, first vector element result indeed na
. if other arguments of ifelse()
have special code take care of situation, won't because code never taken account.
for example, checking na
first gives desired result:
col4 <- ifelse(is.na(col1), "c", ifelse(col1 < 4.00e+07, "a","b")) col4 ## [1] "b" "b" "c" "b" "a" "c" "b" "a"
Comments
Post a Comment