如何在R语言中基于模式从字符串创建数据集
将字符向量转换为指定格式的数据集(R语言实现)
需求
给定如下R字符向量:
ST <- c("7.5 (wk0) / 7.4 (wk4) / 10.3 (wk8) / 12.7 (wk12)", "140.0 (wk0) / 161.3 (wk4) / 142.5 (wk8)")
需要将其转换为包含STvalue(数值)和WEEK(周数)两列的数据集,最终格式如下:
STvalue WEEK 7.5 0 7.4 4 10.3 8 12.7 12 140.0 0 161.3 4 142.5 8
方法一:使用tidyverse工具包
tidyverse的函数可以更简洁地完成字符串拆分和提取操作:
library(tidyverse) # 转换并整理数据 result <- tibble(ST = ST) %>% # 按" / "拆分每个字符串为独立行 separate_rows(ST, sep = " / ") %>% # 提取数值和周数 mutate( STvalue = as.numeric(str_extract(ST, "^\\d+\\.\\d+")), WEEK = as.integer(str_extract(ST, "(?<=wk)\\d+")) ) %>% # 保留需要的列 select(STvalue, WEEK) # 输出结果(隐藏行名) print(result, row.names = FALSE)
方法二:基础R实现
如果不想依赖第三方包,用基础R函数也可以实现:
# 拆分所有字符串为单个条目 split_ST <- unlist(strsplit(ST, " / ")) # 提取数值部分:移除括号及内部内容 STvalue <- as.numeric(sub(" \\(wk\\d+\\)", "", split_ST)) # 提取周数部分:捕获wk后的数字 WEEK <- as.integer(sub(".*wk(\\d+)\\)", "\\1", split_ST)) # 构建数据框 result <- data.frame(STvalue, WEEK) # 输出结果(隐藏行名) print(result, row.names = FALSE)
两种方法最终都会得到你需要的数据集格式。
内容的提问来源于stack exchange,提问作者hooz
相关产品推荐
相关产品推荐

