我正在尝试根据现有变量的值生成两个新变量。这是一个非常简单的操作,但我似乎无法使其正常运行并且在r中的向量的所有值上。我正试图从SPSS转换为r,但这个特定的目标似乎并没有很好地转化为r。
对于Condition的每个值,我想为一个名为“expect”的新变量生成一个值。所以(非正式地)我想要像
这样的东西if Condition = 1, expect = 0
if Condition = 2, expect = 1
if Condition = 3, expect = 0
if Condition = 4, expect = 1
如何将其添加到代码中?如何在整个向量上运行这些链式ifelse语句?我意识到这是一个非常初学的问题,但我一直在寻找相当长的一段时间,并没有找到解决方案。我能收集到的最好的是:
expect<-ifelse(Condition == 1, 0, 1, ifelse(Condition == 2, 1, 0, ifelse(Condition == 3, 0, 1, ifelse(Condition == 4, 1, 0))))
但我知道这不正确。
如果有人可以提供帮助,我们将不胜感激。
答案 0 :(得分:0)
在旧值和新值expect = map[Condition]
之间创建地图,然后创建子集map = c(foo=1, bar=2); unname(map[c("foo", "foo", "bar")])
。使用基于字符的映射名称{{1}}
答案 1 :(得分:0)
你可以随时玩“代码高尔夫”并使其更紧凑,但这里有一个简单的说明如何做到这一点:
Condition <- c(1,2,3,4,0,3,4,5)
expect <- c(NA, NA, NA, NA, NA, NA, NA, NA)
for(i in 1:length(Condition)){
if (Condition[i] == 1){expect[i] <- 0}
if (Condition[i] == 2){expect[i] <- 1}
if (Condition[i] == 3){expect[i] <- 0}
if (Condition[i] == 4){expect[i] <- 1}
}
expect
[1] 0 1 0 1 NA 0 1 NA