![](/img/trans.png)
[英]How to use dplyr to convert variables from numeric to factor with unique levels
[英]How to use mutate and ifelse to convert numerical variables into factor variable with multiple levels
我很難從現有的數字變量創建新的因子變量。 我有一個與參與者的年齡相關的數字變量Age,但想創建一個將參與者的年齡分類為不同類別的因子變量。 每當我運行代碼時,都會出現錯誤:
“錯誤:缺少參數“ no”,沒有默認值。”
我嘗試了以下代碼的不同變體,例如不帶引號的新因子水平,使用:表示范圍等。我的代碼如下。
data.frame%>%
mutate(Age = ifelse(Age < 20, "0"),
ifelse(Age >= 20 & Age <= 29, "1"),
ifelse(Age >=30 & Age <= 39, "2"),
ifelse(Age >= 40 & Age <=49, "3"),
ifelse(Age >= 50 & Age <= 59, "4"),
ifelse(Age >= 60 & Age <= 69, "5"),
ifelse(Age >= 70, "6", NA))
cut()
是執行此操作的最簡單方法。
在基數R中:
Age <- seq(10,80,by=10)
cut(Age,breaks=c(-Inf,seq(20,70,by=10),Inf),
right=FALSE,
labels=as.character(0:6))
我將讓您隨意將其嵌入mutate()
中。
您的代碼的問題是您沒有正確嵌套的選擇:將這段代碼與您的代碼進行仔細比較...
Age = ifelse(Age < 20, "0",
ifelse(Age >= 20 & Age <= 29, "1",
ifelse(...,[yes],[no])))
尾括號")"
應該放在所有ifelse
:
df1 <- data.frame(Age=c(1:80,NA))
df1%>%
mutate(Age_cat = factor(ifelse(Age < 20, "0",
ifelse(Age >= 20 & Age <= 29, "1",
ifelse(Age >=30 & Age <= 39, "2",
ifelse(Age >= 40 & Age <=49, "3",
ifelse(Age >= 50 & Age <= 59, "4",
ifelse(Age >= 60 & Age <= 69, "5",
ifelse(Age >= 70, "6", NA)))))))))
不過,你也應該知道,在dplyr
,這是一個完美的機會case_when
:
df1 %>%
mutate(Age_cat= factor(case_when(
.$Age < 20 ~ "0",
.$Age >= 20 & .$Age <= 29 ~ "1",
.$Age >= 30 & .$Age <= 39 ~"2",
.$Age >= 40 & .$Age <=49 ~ "3",
.$Age >= 50 & .$Age <= 59 ~ "4",
.$Age >= 60 & .$Age <= 69 ~ "5",
TRUE ~"6"))
)
Age Age_cat
1 1 0
2 2 0
3 3 0
4 4 0
5 5 0
...
13 13 0
14 14 0
15 15 0
16 16 0
17 17 0
18 18 0
19 19 0
20 20 1
21 21 1
22 22 1
23 23 1
24 24 1
...
79 79 6
80 80 6
81 NA <NA>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.