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

如何在R中移除数据框中非数值元素并将空值转为NA

解决温度列数值提取与空值转换问题

问题分析

你的wentworth.castle列是带温度单位的字符型数据,包含空字符串,直接转数值时因特殊字符(°C)的编码问题报错,且固定截取字符的方法因数值位数不固定不可靠。

可行解决方案

方法一:Base R 原生处理

通过正则匹配提取所有数字和小数点,再处理空值并转为数值型:

# 移除所有非数字、非小数点的字符
tempdata$wentworth.castle <- gsub("[^0-9.]", "", tempdata$wentworth.castle)
# 将空字符串替换为NA
tempdata$wentworth.castle[tempdata$wentworth.castle == ""] <- NA
# 转换为数值类型
tempdata$wentworth.castle <- as.numeric(tempdata$wentworth.castle)
  • 正则[^0-9.]会匹配所有非数字和非小数点的内容,不管°符号的编码是什么,都能统一移除,避免编码报错。
  • 空字符串转为NA后,as.numeric就能正常转换有效数值。

方法二:使用stringr包(更直观)

借助stringr的str_extract提取连续的数值序列:

library(stringr)
# 提取字符串中的数值部分(整数+可选小数点+小数)
tempdata$wentworth.castle <- str_extract(tempdata$wentworth.castle, "\\d+\\.?\\d*")
# 空字符串转NA
tempdata$wentworth.castle[tempdata$wentworth.castle == ""] <- NA
# 转为数值型
tempdata$wentworth.castle <- as.numeric(tempdata$wentworth.castle)
  • 正则\\d+\\.?\\d*匹配:1个以上数字 + 可选小数点 + 0个以上数字,精准提取温度数值。

修正你之前的截取函数错误

你写的left函数参数名拼写错误(chat应为char),正确写法如下(但不推荐用于此场景,因为数值位数不固定):

left <- function(string, char){substr(string, 1, char)}
# 调用示例(仅作演示,实际不建议用)
tempdata$wentworth.castle <- left(tempdata$wentworth.castle, 6)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:37:49