如何基于另一列创建因子列?求助根据Community area生成Region列
嘿,我来帮你解决这个问题!要基于Community area列的值生成Region因子列,这里有几个实用且可行的方法,你可以根据自己的习惯选择:
方法1:用dplyr的case_when(可读性拉满,推荐)
如果你平时用tidyverse系列工具,这个方法最直观,还能灵活处理更多条件:
library(dplyr) # 替换成你的实际数据框名称,比如df df <- df %>% mutate(Region = factor(case_when( `Community area` == 1 ~ "North", # 注意列名有空格,要用反引号包裹 `Community area` == 2 ~ "South", # 如果存在其他值,可以设置默认值,比如NA或者"Other" TRUE ~ NA_character_ )))
这里case_when会按顺序匹配条件,最后用factor()把结果转成因子类型,完美符合你的需求。
方法2:Base R原生方案(不用额外装包)
如果不想加载外部包,用base R的嵌套ifelse也能实现:
# 同样替换成你的数据框名 df$Region <- factor(ifelse(df$`Community area` == 1, "North", ifelse(df$`Community area` == 2, "South", NA)))
不过如果后续条件变多,嵌套ifelse会有点乱,所以简单条件下用这个没问题。
方法3:直接用factor的映射参数(最简洁)
如果你的Community area只有1和2这两个取值,这个方法最高效:
df$Region <- factor(df$`Community area`, levels = c(1, 2), # 原列的数值 labels = c("North", "South")) # 对应的标签
直接通过levels和labels完成数值到文本的映射,同时自动转为因子,一步到位!
小提示
之前代码没生效的话,大概率是这两个原因:
- 列名
Community area有空格,引用时没加反引号`,导致R识别不了列名; - 忘记把生成的结果赋值回数据框(比如只写了
mutate(...)但没存回df)。
内容的提问来源于stack exchange,提问作者Prashanth Cp
相关产品推荐
相关产品推荐

