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

如何在数据框中仅对指定变量使用as.numeric()函数

嘿,这个需求太常见啦!我给你分享几种靠谱的方法,不管你习惯用base R还是tidyverse工具都能轻松搞定~

先搭个示例场景方便你对照:假设我们有个所有列都是字符型的数据框,现在想把age和score这两列转成数值型:

# 示例数据框
df <- data.frame(
  name = c("Alice", "Bob", "Charlie"),
  age = c("25", "30", "35"),
  score = c("90", "85", "95"),
  city = c("NY", "LA", "Chicago"),
  stringsAsFactors = FALSE
)

方法1:用Base R(无需额外装包)

直接指定要转换的列名或者列索引,用lapply批量处理就行:

# 通过列名指定目标列
df[c("age", "score")] <- lapply(df[c("age", "score")], as.numeric)

# 或者通过列索引(比如第2、3列)
df[, 2:3] <- lapply(df[, 2:3], as.numeric)

方法2:用dplyr(tidyverse风格,更简洁直观)

如果你平时用tidyverse生态,现在推荐用across函数——这是dplyr新版本的标准写法:

library(dplyr)

df <- df %>%
  mutate(across(c(age, score), as.numeric))

# 要是你想按列名模式匹配(比如所有带"num"关键词的列),还能这么玩:
# df <- df %>% mutate(across(contains("num"), as.numeric))

方法3:兼容旧版dplyr的写法(mutate_at)

如果你用的是较旧版本的dplyr,mutate_at也能实现同样效果:

df <- df %>%
  mutate_at(vars(age, score), as.numeric)

小提醒:处理混有非数字字符的情况

如果你的目标列里混了非数字内容(比如"25岁"这种格式),直接用as.numeric会得到NA值。这时候可以用readr包的parse_number来智能提取数字,更稳健:

library(readr)
df <- df %>%
  mutate(across(c(age, score), parse_number))

选哪种方法全看你的习惯:base R不用装任何额外包,tidyverse的写法则更直观易读~

内容的提问来源于stack exchange,提问作者Winston Willett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:47:59