R语言:移除数据框Resultaat中Number列的NA值并保留数字
移除字符型列中的NA字符串保留数字
现有名为
Resultaat的数据框,结构如下:Cluster Number W63 1020 NA NA NA 1100 W50 1020 NA 1240 NA NA其中
Number列为字符型,需要移除该列中所有的NA字符串,仅保留数字,期望输出:Cluster Number W63 1020 1100 W50 1020 1240尝试过以下代码但未达预期:
gsub("^NA(?:\\s+NA)*\\b\\s*|\\s*\\bNA(?:\\s+NA)*$", "", Resultaat$Number)Resultaat <- Resultaat[!is.na(Resultaat)]
解决方案
你的问题核心是Number列里的NA是字符串内容,不是数据框的缺失值,所以直接用!is.na()无效;之前的正则只匹配开头或结尾的连续NA,没处理中间的NA,因此失效。以下两种方法可以解决:
方法1:Base R实现
通过拆分字符串、过滤NA、重新合并的步骤处理:
# 遍历Number列的每个元素 Resultaat$Number <- sapply(Resultaat$Number, function(x) { # 按空格拆分字符串 parts <- strsplit(x, "\\s+")[[1]] # 筛选出非NA的部分,用空格合并 paste(parts[parts != "NA"], collapse = " ") })
方法2:stringr包简化实现
借助正则替换所有单独的NA字符串,再清理多余空格:
library(stringr) # 替换所有单独的NA(含后续空格)为空 Resultaat$Number <- str_replace_all(Resultaat$Number, "\\bNA\\s*", "") # 移除首尾多余空格 Resultaat$Number <- str_trim(Resultaat$Number)
内容的提问来源于stack exchange,提问作者Timo V
相关产品推荐
相关产品推荐

