首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重新编码中使用if,else

在重新编码中使用if,else
EN

Stack Overflow用户
提问于 2017-07-31 13:09:44
回答 2查看 9K关注 0票数 0

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

data$var1的值从1-7开始,在一个名为data$var2的新变量中,我试图将其降为2。代码如下所示:

代码语言:javascript
复制
data$var2 <- recode(data$var1, "1:3=1; else=0")

但是,当我执行代码时,会得到以下错误:

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

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

我遗漏了什么?“论点2”是什么意思?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-31 13:22:25

我建议使用ifelse

代码语言:javascript
复制
data$var2 <- ifelse(data$var1 < 4, 1, 0)

使用recode是错误的:

代码语言:javascript
复制
data$var2<- recode(data$var1, "1:3=1; else=0")

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

使用recode的“正确”方式应该是这样的

代码语言:javascript
复制
data$var2 <- recode(data$var1, `1` = 1, `2` = 1, `3` = 1, .default = 0)

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

票数 3
EN

Stack Overflow用户

发布于 2017-07-31 13:24:25

有很多这样做,可能其中许多比我的方法容易。

代码语言:javascript
复制
 # 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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45416868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档