如何识别R数据框中无法转换为数值类型的所有字符串项?
识别数据框中无法转换为数值的字符串并批量转换
1. 提取所有无法转换为数值的字符串
要找出数据框中所有不能直接转为数值的字符串,可以通过将所有元素转为数值类型,筛选出转换后为NA的原字符串,再去重得到目标列表:
library(dplyr) library(stringr) # 示例数据 num = data.frame(var1 = c("2", "green", "5"), var2 = c("blue","4", "9"), var3 = c("ble", "4", "1"), var4 = c("5", "7", "big")) # 提取非数值字符串(去重) non_numeric_vals <- num %>% unlist() %>% as.character() %>% {.[is.na(as.numeric(.))]} %>% unique() non_numeric_vals # 输出结果:[1] "green" "blue" "ble" "big"
2. 批量替换字符串并转换为数值类型
针对识别出的非数值字符串,使用正则表达式批量替换为对应数值,再将所有目标列转为numeric类型:
# 替换字符串并转换类型 num_processed <- num %>% # 批量替换指定字符串为对应数值 mutate(across(contains("var"), ~ str_replace_all(., c("green" = "3", "blue|ble" = "3.5", "big" = "10")))) %>% # 将所有目标列转为numeric类型 mutate(across(contains("var"), as.numeric)) num_processed # 输出结果: # var1 var2 var3 var4 # 1 2 3.5 3.5 5 # 2 3 4.0 4.0 7 # 3 5 9.0 1.0 10
额外注意事项
如果数据中存在带空白字符的字符串(比如" green "),可以先添加str_trim()清理空白,避免误识别:
# 先清理空白再识别非数值字符串 num_clean_spaces <- num %>% mutate(across(contains("var"), str_trim)) %>% unlist() %>% as.character() %>% {.[is.na(as.numeric(.))]} %>% unique()
内容的提问来源于stack exchange,提问作者Mark Davies
相关产品推荐
相关产品推荐

