在recode

时间:2017-07-31 13:09:45

标签: r if-statement recode

我正在尝试复制一些代码,但遇到了麻烦:

data$var1的值为1-7,我想在一个名为data$var2的新变量中将其减少到只有2个值。代码如下所示:

data$var2 <- recode(data$var1, "1:3=1; else=0")

但是,当我执行代码时,出现以下错误:

  

“错误:参数2必须命名,而不是未命名”

我正在使用最新版本的R并使用Tidyverse软件包。

我错过了什么? “论证2未命名”是什么意思?

2 个答案:

答案 0 :(得分:2)

我建议使用ifelse

data$var2 <- ifelse(data$var1 < 4, 1, 0)

您对recode的使用是错误的:

data$var2<- recode(data$var1, "1:3=1; else=0")

您只提供了一个字符串,而不是几个参数[name]=[replacement]。有关详细信息,请阅读help('recode')

&#34;正确&#34;使用recode的方式就像

data$var2 <- recode(data$var1, `1` = 1, `2` = 1, `3` = 1, .default = 0)

但在这种情况下你应该坚持使用ifelse

答案 1 :(得分:0)

有许多事要做,可能其中许多比我的方法更容易。

 # Create some data
 df      <- c()
 df$var1 <- ceiling(runif(20, min = 0.5, max = 7.5))
 df$var1
 #  [1] 5 8 5 2 6 6 8 4 5 4 4 7 3 6 1 5 7 6 5 6

 # inds will contain TRUE/FALSE 
 inds           <- (df$var1 <= 3)
 df$var2[inds]  <- 1
 df$var2[!inds] <- 0
 df$var2
 # [1] 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1

旁注:我使用df作为我的对象名称,因为调用对象data不是一个好主意。 R中保留名称data用于其他目的(请参阅?data)。即使在这种情况下它可能不会导致问题,我仍然建议使用df(或其他任何内容)而不是data