如何用R的tidyverse拆分age列并创建填充color列?
拆分age列提取颜色的实现方法
以下是几种适合的R语言实现方式,满足你用mutate()或更简便工具处理的需求:
方法1:用tidyr::separate()(最便捷)
这种方法直接拆分指定列,一步完成age列的拆分和新color列的创建,同时可自动转换数据类型:
library(dplyr) library(tidyr) df_processed <- df %>% separate(age, into = c("age", "color"), sep = "_", convert = TRUE)
sep="_":指定按下划线作为分隔符into = c("age", "color"):定义拆分后生成的两列名称convert = TRUE:自动将拆分后的age列转换为数值类型(原数据是字符型)
方法2:用dplyr::mutate() + stringr函数
如果需要明确用mutate()来分步处理,可结合字符串提取函数实现:
library(dplyr) library(stringr) df_processed <- df %>% mutate( # 提取下划线后的颜色部分 color = str_extract(age, "(?<=_).+"), # 提取开头的数字并转换为数值,替换原age列 age = as.numeric(str_extract(age, "^\\d+")) )
str_extract(age, "(?<=_).+"):通过正则表达式的正向预查,匹配下划线之后的所有字符str_extract(age, "^\\d+"):匹配age字符串开头的所有数字,再转为数值类型
方法3:基础R实现(无需额外包)
如果不想加载tidyverse系列包,用基础R的字符串拆分函数也能完成:
# 拆分age列的每个元素 split_result <- strsplit(df$age, "_") # 提取数字部分替换原age列 df$age <- sapply(split_result, function(x) as.numeric(x[1])) # 提取颜色部分生成新color列 df$color <- sapply(split_result, function(x) x[2])
处理后的结果
不管用哪种方法,最终都会得到如下数据框:
| name | age | sex | color |
|---|---|---|---|
| Steve | 12 | M | pink |
| Darrel | 14 | M | green |
| Barney | 19 | M | blue |
| Lola | 24 | F | cyan |
内容的提问来源于stack exchange,提问作者morningstarsaus
相关产品推荐
相关产品推荐

