You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中拆分KID数据集STRATA列数字并按特征重命名列的方法

我来帮你解决这个问题,这里有两种常用的R语言处理方案,分别是基础R原生方法和tidyverse工具链的简洁实现,你可以根据自己的使用习惯选择:

方法一:基础R原生实现

这种方法不需要额外加载包,适合习惯用基础语法的用户:

步骤1:构造示例数据(如果你的数据集已经存在,这步可以跳过)

KID <- data.frame(STRATA = c(4231, 2321, 3133, 2112, 3212))

步骤2:将数字转为字符并拆分每一位

先把STRATA列的数字转为字符类型,这样才能按位置提取每一位:

# 转换为字符
KID$STRATA_char <- as.character(KID$STRATA)

# 按位置提取每一位数字到临时编码列
KID$geo_code <- substr(KID$STRATA_char, 1, 1)    # 第1位:地理位置编码
KID$control_code <- substr(KID$STRATA_char, 2, 2) # 第2位:管控类型编码
KID$loc_teach_code <- substr(KID$STRATA_char, 3, 3) # 第3位:区位/教学属性编码
KID$bed_size_code <- substr(KID$STRATA_char, 4, 4) # 第4位:床位规模编码

步骤3:将编码映射为对应的特征标签

用factor()函数把数字编码转换成易读的文字标签,同时保留分类变量的顺序:

# 映射地理位置
KID$Geography <- factor(KID$geo_code,
                        levels = c("1", "2", "3", "4"),
                        labels = c("东北部", "中西部", "南部", "西部"))

# 映射管控类型
KID$Control_Type <- factor(KID$control_code,
                           levels = c("1", "2", "3", "4"),
                           labels = c("政府", "私立非营利", "私立营利", "私立两类均可"))

# 映射区位/教学属性
KID$Location_Teaching <- factor(KID$loc_teach_code,
                                levels = c("1", "2", "3"),
                                labels = c("乡村", "城市非教学", "城市教学"))

# 映射床位规模
KID$Bed_Size <- factor(KID$bed_size_code,
                       levels = c("1", "2", "3"),
                       labels = c("小型", "中型", "大型"))

步骤4:清理临时列(可选)

如果不需要中间的编码列和字符列,可以删除它们:

KID <- KID[, !names(KID) %in% c("STRATA_char", "geo_code", "control_code", "loc_teach_code", "bed_size_code")]

方法二:tidyverse工具链实现(更简洁)

如果你熟悉dplyr和stringr包,这种方法代码更紧凑,可读性更强:

步骤1:加载所需包

library(dplyr)
library(stringr)

步骤2:一步完成拆分与映射

用管道操作%>%把所有步骤串联起来,同时处理补全4位数字的情况(如果你的数据里有不足4位的数字,str_pad会自动在左侧补0,避免提取错误):

KID_clean <- KID %>%
  # 确保STRATA是4位字符(不足补0)
  mutate(STRATA_char = str_pad(as.character(STRATA), width = 4, side = "left", pad = "0")) %>%
  # 拆分每一位并直接映射为标签
  mutate(
    Geography = factor(str_sub(STRATA_char, 1, 1),
                       levels = c("1","2","3","4"),
                       labels = c("东北部","中西部","南部","西部")),
    Control_Type = factor(str_sub(STRATA_char, 2, 2),
                          levels = c("1","2","3","4"),
                          labels = c("政府","私立非营利","私立营利","私立两类均可")),
    Location_Teaching = factor(str_sub(STRATA_char, 3, 3),
                               levels = c("1","2","3"),
                               labels = c("乡村","城市非教学","城市教学")),
    Bed_Size = factor(str_sub(STRATA_char, 4, 4),
                      levels = c("1","2","3"),
                      labels = c("小型","中型","大型"))
  ) %>%
  # 移除中间字符列(如果不需要保留原始STRATA列,可以加上 `-STRATA`)
  select(-STRATA_char)

补充说明

  • 如果不需要分类变量(factor类型),可以把factor()换成as.character(),直接得到字符型的标签列。
  • 两种方法处理后,你都会得到4个独立的特征列,分别对应地理位置、管控类型、区位/教学属性和床位规模。

内容的提问来源于stack exchange,提问作者Laxmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:27:35