在R中使用IF ELSE从数值列创建分类列时遇错误求助
问题解决:根据月份生成季节分类列
错误原因
你的代码存在两个核心问题:
- 语法错误:每个
ifelse的条件后多写了一个闭合括号,破坏了ifelse(条件, 真结果, 假结果)的标准结构,导致as.factor被传入多余参数,触发"unused arguments"报错。 - 逻辑错误:季节划分规则混乱,比如把3-5月同时归为Winter和Spring,不符合常规季节定义。
修正后的base R代码(ifelse版本)
同时修正语法与逻辑,确保每个月份对应正确季节:
bostoncrimes_zips$Season <- as.factor( ifelse(bostoncrimes_zips$MONTH %in% c(12, 1, 2), "Winter", ifelse(bostoncrimes_zips$MONTH %in% 3:5, "Spring", ifelse(bostoncrimes_zips$MONTH %in% 6:8, "Summer", "Fall"))) )
更简洁的替代写法
方法1:使用dplyr的case_when(可读性更强)
library(dplyr) bostoncrimes_zips <- bostoncrimes_zips %>% mutate(Season = factor(case_when( MONTH %in% c(12, 1, 2) ~ "Winter", MONTH %in% 3:5 ~ "Spring", MONTH %in% 6:8 ~ "Summer", MONTH %in% 9:11 ~ "Fall" )))
方法2:使用base R的cut函数(高效简洁)
bostoncrimes_zips$Season <- cut( bostoncrimes_zips$MONTH, breaks = c(0, 2, 5, 8, 11, 12), labels = c("Winter", "Spring", "Summer", "Fall", "Winter"), include.lowest = TRUE )
内容的提问来源于stack exchange,提问作者Christine Brydges
相关产品推荐
相关产品推荐

