2017-04-02 101 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