如何在R中按固定字符位置拆分数据集的code变量为school和class
按固定位置拆分字符型变量的解决方案
针对你需要从固定长度的code变量中按位置拆分出school(前两位)和class(第三、四位)的需求,以下几种R语言方案可以精准实现:
方案一:Base R原生方法(无需额外包)
直接使用substr()函数截取指定位置的字符,操作简单高效:
# 截取前两位作为school df$school <- substr(df$code, start = 1, stop = 2) # 截取第三、四位作为class df$class <- substr(df$code, start = 3, stop = 4)
方案二:调整datawizard包的参数
你之前使用data_separate时误用了separator参数,该参数用于指定分隔符的位置,而按固定位置拆分应使用positions参数:
library(datawizard) df <- data_separate( df, select = code, new_columns = c("school", "class", "student_id"), # 拆分出三部分,最后两位为学生编号 positions = c(2, 4), # 在第2位、第4位字符后拆分 append = TRUE ) # 若不需要学生编号,可直接删除该列 df$student_id <- NULL
方案三:tidyverse风格的stringr包实现
如果习惯使用管道操作,stringr包的str_sub()语法更直观:
library(stringr) library(dplyr) df <- df %>% mutate( school = str_sub(code, 1, 2), class = str_sub(code, 3, 4) )
以上所有方案均针对字符型变量操作,能完整保留code中的前导零,符合你的需求。
内容的提问来源于stack exchange,提问作者sunny
相关产品推荐
相关产品推荐

