double="true"
data=data.frame("var1"=c(1:10))
data$var2=ifelse(double=="true",2*data$var1,NA)
data$var2want=2*data$var1
如果我想将变量加倍,我有一个字符,该字符将"true"存储为"true"。在这个例子中,我从等于 1:10 的 var1 开始。双="真"。所以我想让 var2 等于 (1:10(*2。所需的输出是var2want。但是,当我应用 ifelse 语句时,我只得到所有值的 var2=2。我不确定如何解决此问题。
double
长度为 1
length(double)
#[1] 1
而
length(data$var1)
#[1] 10
使用 ifelse
时,它返回长度与 test
相同的值
double == "true"
返回长度为 1 的向量,因此您只返回一个值,即计算的第一个值
2*data$var1[1]
#[1] 2
并且此值在所有值中循环使用。
为了使ifelse
为所有价值工作,我们需要以某种方式使长度相等
ifelse(rep(double == "true", length(data$var1)), 2*data$var1, NA)
#[1] 2 4 6 8 10 12 14 16 18 20
但是,如果您只有一个值要比较,最好使用简单的if
/else
而不是ifelse
data$var2 <- if (double == "true") 2*data$var1 else NA