2017-07-31 66 views
0

我试图复制一些代码,其他人,但我遇到了麻烦:如果使用内重新编码

data$var1有1-7我正努力减少在名为data$var2新变量只值2的值。代码如下所示:

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

然而,当我执行的代码,我得到以下错误:

"Error: Argument 2 must be named, not unnamed"

我在R的最新版本,并使用Tidyverse包。

我错过了什么? '参数2未命名'是什么意思?

回答

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')

“正确”的方式与recode会像

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

但是你应该在这种情况下,与ifelse坚持。

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