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

dplyr中用parse_number与mutate提取文本数字并替换原始变量的方法

解决方案

你原来的代码因为先调用了select()剔除了范围外的列,所以只能拿到转换后的子集,把select步骤去掉,直接在mutate中限定要处理的列范围即可保留原数据集的全部内容。

dplyr 1.0.0及以上版本(推荐写法)

使用across()函数指定处理范围:

library(dplyr)
library(readr)

data <- data %>%
  mutate(
    across(
      .cols = systematic1:withdrawn, # 指定要处理的列范围
      .fns = ~ if(is.character(.x)) parse_number(.x, na = c("Not sure")) else .x
    )
  )

说明:

  • 仅对systematic1到withdrawn范围内的字符型变量执行数值提取,范围内的非字符变量、以及范围外的所有变量都会原封不动保留
  • parse_number会自动提取字符串开头的数字,完全符合你把「1 - Completely Disagree」转换为1的需求,同时会把「Not sure」识别为NA

旧版dplyr兼容写法

如果使用的是1.0.0以下的dplyr版本,用mutate_at实现:

data <- data %>%
  mutate_at(
    .vars = vars(systematic1:withdrawn),
    .funs = ~ if(is.character(.)) parse_number(., na = c("Not sure")) else .
  )

内容的提问来源于stack exchange,提问作者Jess A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:12:02