如何将R中region列的因子规则应用到municipality列?
将市政数据映射到所属区域的因子数值
嘿,我完全懂你想要实现的效果——让每个城市的数值编码对应它所属区域的因子数值,而不是城市自身默认的因子排序。咱们一步步来搞定这个问题:
首先,先明确区域列的因子数值对应关系。默认情况下R会按字母顺序给因子分配水平,但从你想要的结果来看,你需要的区域数值映射是:
- Etelä-Pohjanmaa → 1
- Pirkanmaa → 2
- Pohjois-Karjala → 3
- Pohjois-Pohjanmaa → 4
- Uusimaa → 5
步骤1:设置区域列的因子水平(匹配预期数值)
先手动调整region列的因子水平,确保它的数值和你要的一致:
# 重新定义region的因子水平,按目标数值顺序排列 myData$region <- factor(myData$region, levels = c("Etelä-Pohjanmaa", "Pirkanmaa", "Pohjois-Karjala", "Pohjois-Pohjanmaa", "Uusimaa")) # 验证数值是否正确 as.numeric(myData$region) # 输出正好是:[1] 5 4 2 3 1 5
步骤2:将区域数值映射到城市列
因为每个城市对应唯一的区域,最简单的方式就是直接把区域的数值赋值给城市相关的列:
# 创建新列存储城市对应的区域因子数值 myData$municipality_region_num <- as.numeric(myData$region) # 查看结果 myData$municipality_region_num # 输出就是你想要的:[1] 5 4 2 3 1 5
可选:直接修改城市列的因子属性(让as.numeric返回区域数值)
如果你确实需要让municipality列本身作为因子,且as.numeric()结果等于区域数值,可以通过调整因子水平顺序来实现:
# 创建城市到区域数值的映射表 municipality_map <- setNames(as.numeric(myData$region), myData$municipality) # 按区域数值排序,得到因子水平的顺序 sorted_levels <- names(sort(municipality_map)) # 重新设置municipality的因子水平 myData$municipality <- factor(myData$municipality, levels = sorted_levels) # 现在转成numeric就得到目标结果 as.numeric(myData$municipality) # 输出:[1] 5 4 2 3 1 5
这样就完美达成你的需求啦——本质上是把城市的编码和它所属区域的编码绑定,而非使用城市自身的默认排序。
内容的提问来源于stack exchange,提问作者Vesanen
相关产品推荐
相关产品推荐

