2017-02-12 90 views
0

在下面的示例中,我想要加法的值而不是NA。我怎样才能做到这一点?在R中,如何获得加法的值而不是NA

set.seed(7354) 
a <- rbinom(1,1,.5) 
x <- ifelse(a==0, rexp(1, 1/50), NA) 
y <- ifelse(a==1, rexp(1, 1/100), NA) 
b <- ifelse(a==1, rbinom(1,1,.5), NA) 
z1 <- ifelse(b==1, rexp(1, 1/100), NA) 
z2 <- ifelse(b==0, rexp(1, 1/190), NA) 
s <- (1-a)*x + a *(y + b * z1 + (1-b) * z2) 

我希望的输出是s = 968.8501

+0

你有使用NA而不是0的原因吗? –

+0

@HongOoi对于'b'我不能使用0.如果'b'变成NA,那么's'也会变成NA。 –

+0

@HongOoi'b'是一个二进制变量,当且仅当'a = 1'时才会生成它。 –

回答

2

做这个

s = c((1-a)*x, a*y, a*b*z1, a*(1-b)*z2) 
s = sum(s, na.rm = T) 

这将让你有来港定居,但他们不会影响不是项的总和。

1
set.seed(7354) 

a <- rbinom(1,1,.5) 
x <- (a==0) * rexp(1, 1/50) 
y <- (a==1) * rexp(1, 1/100) 
b <- (a==1) * rbinom(1,1,.5) 
z1 <- (b==1) * rexp(1, 1/100) 
z2 <- (b==0) * rexp(1, 1/190) 

(1-a)*x + a *(y + b * z1 + (1-b) * z2) 
# [1] 968.8501 

如果你这样做是为模拟或引导循环的一部分,这将是比和一帮ifelse速度比较快。

+0

只有当a = 1和b是一个二进制变量时,才会生成'b',这个变量可以取值为0或1.我很困惑,如果'a = 0'或I是否会为'b'取0值如果'a = 0',则将采用NA作为'b'。 –

+0

如果a = 0,那么b是什么都没有关系,因为这部分总和将被清零。 –

+0

所需要的只是b不是NA。 –