我有以下ifelse陈述。
ww.LIG = ifelse( (Accel2$wk.VWD >= 3 & Accel2$we.VWD >= 0 )
| ( Accel2$wk.VWD >=2 & Accel2$we.VWD >=1 )
| ( Accel2$wk.VWD >=1 & Accel2$we.VWD >=2) ,
(Accel2$wk.LIG + Accel2$we.LIG)/2, NA)
如果满足上述条件,最后一行取两个变量的平均值。对于满足第一行中的第一个标准的数据(Accel2 $ wk.VWD> = 3& Accel2 $ we.VWD> = 0),对于名为Accel2 $ we.VWD的变量存在NA,这显然会返回尝试进行计算时使用NAN。
从这个论点中删除NA的简单方法是什么?
非常感谢。
答案 0 :(得分:1)
你可以用我认为的两种方式来解决这个问题:
1)在此之前检查NAs的另一个问题 - 如:
ww.LIG = ifelse( is.na(Accel2$wk.VWD) | is.na(Accel2$we.VWD), NA,
ifelse( (Accel2$wk.VWD >= 3 & Accel2$we.VWD >= 0 )
| ( Accel2$wk.VWD >=2 & Accel2$we.VWD >=1 )
| ( Accel2$wk.VWD >=1 & Accel2$we.VWD >=2) ,
(Accel2$wk.LIG + Accel2$we.LIG)/2, NA))
2)删除NA行开头 - 例如:
df = complete.cases(data.frame(wkVWD = Accel2$wk.VWD, weVWD = Accel2$we.VWD, Accel2$wk.LIG, weLIG = Accel2$we.LIG))
df$wwLIG = ifelse( (df$wkVWD >= 3 & df$weVWD >= 0 )
| ( df$wkVWD >=2 & df$weVWD >=1 )
| ( df$wkVWD >=1 & df$weVWD >=2) ,
(df$wkLIG + df$weLIG)/2, NA)
这对你有用吗?
答案 1 :(得分:0)
您的问题定义不明确:以下比较的结果应该是什么?NA> = value,true或false?首先定义它。
我会考虑条件中的NA意味着条件不满足(a + b
的总和只是一个优化,它也可以是两个独立的条件:
a = Accel2$wk.VWD
b = Accel2$we.VWD
ww.LIG = ifelse(!is.na(a + b) &
((a >= 3 & b >= 0) | (a >= 2 & b >= 1) | (a >= 1 & b >= 2)),
(Accel2$wk.LIG + Accel2$we.LIG)/2, NA)
答案 2 :(得分:-1)
你可能会以艰难的方式解决这个问题。如果没有您的数据样本,我无法确定,但我认为您可以直接替换您的"平均值"
mean(c(Accel2$wk.LIG , Accel2$we.LIG), na.rm=TRUE)
目前尚不清楚是否要保留包含NA
值的输入。