2017-04-02 117 views
1

我正在处理与每天,男性,白色烟熏类别的出生体重数据。创建一个虚拟变量

我想创建一个非吸烟者的虚拟变量,我使用的是nonsmoker<-ifelse(data$cig==0,1,0),但对于吸烟者来说,每天吸烟1-5支,我不知道如何设置系列。

我想也许light smoker<-ifelse(data$cigs==1-5,1,0)会工作,但不要猜测。

+1

您可能正在寻找'cut'。读一下'?cut'并在R标签内搜索。如果您设置了适当的因子变量,R会自动创建假人。 'cut'可能是最好的方法,因为你也可以为关卡添加信息。作为附注,除非您对rstudio本身有疑问,否则请不要提及或标记rstudio。 R和rstudio是独立的软件应用程序。 – lmo

回答

1

你需要使用一个布尔值来选择值大于1且小于5。因此,像:

smoker<-ifelse((data$cigs>=1) & (data$cigs<=5),1,0)

您也可以使用cut方法来创建一个因素,水平然后你可以重命名:

cig <- 0:10 # your original data 
smoker <- cut(cig , c(-1, 0, 5, 10)) 
levels(smoker) <- c("0", "1-5", "6-10") # rename the levels 

这将然后给你看起来像这样一个因素:

> smoker 
[1] 0 1-5 1-5 1-5 1-5 1-5 6-10 6-10 6-10 6-10 6-10 

您可以设置您的切割边界(即是否包含/不包括端点的范围?)通过玩include.lowestright参数cut方法的参数

+0

OP真的在寻找'cut'。用你建议的方法,他必须为感兴趣的变量的每个级别写一行,并将该变量添加到data.frame。这可以很容易地使用'cut'折叠成一行。这不仅是一行代码,而且还可以通过'lm','glm'或其他使用公式接口的建模函数进行有效解释。我不会低估你的答案,但不得不不同意这种方法。 – lmo

+0

那么,我试图在他的问题的具体限制内提供答案(即,为什么当前的代码不工作)。但是,我知道'cut'更为理想 – Simon

+0

最好提供完整的答案,而不是简单地满足最低限度的需求。这将减少后续问题的数量,并帮助未来的读者避免相同的错误。 – lmo