如何用dplyr将R中以w33、w35开头的字符列转为数值列?
正确实现方式
你的代码问题在于范围选得不对——它会把**所有字符列(除了names)**都转成数值型,但你实际只需要处理以w33、w35开头的列。用dplyr的列名选择器精准匹配目标列即可:
方法1:用starts_with匹配开头(推荐)
starts_with可以直接接受多个前缀,精准筛选列名以w33或w35开头的列:
library(dplyr) # 替换成你的数据集名称,比如df df <- df %>% mutate(across(starts_with(c("w33", "w35")), as.numeric))
方法2:用正则表达式匹配(更灵活)
如果需要更精确的匹配规则,比如确保是w33/w35后跟数字,可以用matches结合正则表达式:
df <- df %>% mutate(across(matches("^w3[35]"), as.numeric))
这里^w3[35]的意思是:列名以w3开头,第三个字符是3或5,完全符合你提到的w33xxxx、w35xxxx格式。
补充说明
如果这些目标列里存在非数字的字符(虽然你说只有数字或NA),as.numeric会把它们转为NA。如果需要更容错的转换,可以用readr::parse_number,它会自动提取字符串中的数字部分:
library(readr) df <- df %>% mutate(across(starts_with(c("w33", "w35")), parse_number))
内容的提问来源于stack exchange,提问作者user24236624
相关产品推荐
相关产品推荐

