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

在R中基于字符串模式重塑列:用dplyr::mutate创建新列

R语言:基于字符串模式创建新列的解决方案

可复现数据

先定义原始数据框dat和目标数据框示例tidy_dat:

library(dplyr)
library(stringr)

# 原始数据
dat <- tibble(
  questionType = c(
    "prop1_condA_rank1_prob0.8",
    "prop2_condB_rank2_prob0.5",
    "prop1_condA_rank3_prob0.2",
    "prop3_condC_rank1_prob0.9"
  ),
  values = c("1,0.8", "2,0.5", "3,0.2", "1,0.9")
)

# 目标数据框示例
tidy_dat <- tibble(
  questionType = c(
    "prop1_condA_rank1_prob0.8",
    "prop2_condB_rank2_prob0.5",
    "prop1_condA_rank3_prob0.2",
    "prop3_condC_rank1_prob0.9"
  ),
  values = c("1,0.8", "2,0.5", "3,0.2", "1,0.9"),
  propositions = c("prop1", "prop2", "prop1", "prop3"),
  condition = c("condA", "condB", "condA", "condC"),
  rank = c(1, 2, 3, 1),
  prob = c(0.8, 0.5, 0.2, 0.9)
)

解决方案代码

使用dplyr::mutate()结合stringr工具提取字符串模式,同时拆分values列生成目标列:

tidy_result <- dat %>%
  mutate(
    # 从questionType提取命题标识
    propositions = str_extract(questionType, "prop\\d+"),
    # 从questionType提取条件标识
    condition = str_extract(questionType, "cond[A-Z]"),
    # 拆分values列获取rank并转为整数
    rank = as.integer(str_split(values, ",", simplify = TRUE)[,1]),
    # 拆分values列获取prob并转为数值
    prob = as.numeric(str_split(values, ",", simplify = TRUE)[,2])
  )

# 查看结果
tidy_result

代码说明

  • propositions列:通过正则prop\\d+匹配questionType中以prop开头的命题部分。
  • condition列:通过正则cond[A-Z]匹配questionType中以cond开头的条件部分,若条件格式有变化(如cond_xxx),可调整正则为cond_.+?(?=_rank)精准匹配到rank前的内容。
  • rank/prob列:用str_split()按逗号拆分values列,分别提取对应部分并转换为对应数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:52:43