在R中根据模式与分隔符将数据框列拆分为多列
拆分数据框中的字符串列
数据准备
先加载原始数据框:
df <- read.table(text = " parameter_1_day_10 parameter_1_day_3 parameter_2_last_day", header = FALSE, col.names = "V1")
目标是将V1列拆分为两列:第一列为parameter_后的数字,第二列为数字后下划线开始的剩余字符串,最终结构如下:
# 目标输出 # num day_part # 1 1 day_10 # 2 1 day_3 # 3 2 last_day
解决方案
方法1:用tidyverse工具(tidyr::extract)
extract函数可通过正则表达式的捕获组直接提取目标内容,代码简洁高效:
library(tidyr) df2 <- df %>% extract(V1, into = c("num", "day_part"), regex = "parameter_(\\d+)_(.*)", convert = TRUE)
regex = "parameter_(\\d+)_(.*)":定义两个捕获组,(\\d+)匹配数字部分,(.*)匹配剩余所有字符convert = TRUE:自动将数字列转换为整数类型
方法2:基础R实现
无需额外加载包,用内置字符串处理函数完成拆分:
# 提取数字列 df$num <- as.integer(sub("parameter_(\\d+)_.*", "\\1", df$V1)) # 提取日期部分列 df$day_part <- sub("parameter_\\d+_(.*)", "\\1", df$V1) # 筛选需要的列 df2 <- df[, c("num", "day_part")]
sub函数通过正则表达式替换,\\1引用捕获组匹配到的内容
方法3:用stringr包提取
如果习惯stringr语法,可通过str_match提取捕获组内容:
library(stringr) # 匹配所有捕获组 match_result <- str_match(df$V1, "parameter_(\\d+)_(.*)") # 转换为数据框 df2 <- data.frame( num = as.integer(match_result[, 2]), day_part = match_result[, 3], stringsAsFactors = FALSE )
内容的提问来源于stack exchange,提问作者Kryo
相关产品推荐
相关产品推荐

