从数据框 R 列中删除 NA

标签 r regex string dataframe na

我有一个名为 Resultaat 的数据框

Cluster Number
W63     1020 NA NA NA 1100
W50     1020 NA 1240 NA NA

我想删除所有 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)]但没有任何效果

最佳答案

这里有一个选项 - 使用 read.table 读取“Number”列,并使用 unite 所有列(不包括 NA 元素) na.rm = TRUE

library(tidyr)
library(dplyr)
read.table(text = Resultaat$Number, header = FALSE, fill = TRUE) %>% 
  unite(Number, everything(), na.rm = TRUE, sep = " ") %>% 
  bind_cols(Resultaat[1], .)

-输出

Cluster    Number
1     W63 1020 1100
2     W50 1020 1240

关于gsub,可以是

gsub("\\s+NA|NA\\s+|NA$|^NA", "", Resultaat$Number)
[1] "1020 1100" "1020 1240"

或者也可以使用 tidvyerse 方法作为

library(dplyr)
library(tidyr)
library(stringr)
Resultaat %>%
   separate_rows(Number) %>% 
   na_if("NA") %>%
   drop_na() %>%
   group_by(Cluster) %>%
   summarise(Number = str_c(Number, collapse = " "))

-输出

# A tibble: 2 × 2
  Cluster Number   
  <chr>   <chr>    
1 W50     1020 1240
2 W63     1020 1100

数据

Resultaat <- structure(list(Cluster = c("W63", "W50"), 
Number = c("1020 NA NA NA 1100", 
"1020 NA 1240 NA NA")), class = "data.frame", row.names = c(NA, 
-2L))

关于从数据框 R 列中删除 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73816863/

相关文章:

java - 如何根据多个分隔符 split() 字符串?

python - 在python中随机播放字符串

R:比这个for循环更有效的解决方案

R - 合并两个数据帧 - sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list' 中出现错误

r - 每列采样一行,大量缺失数据

Javascript 正则表达式导致脚本无响应

java - 替换Java中几个分隔符内的所有子字符串

r - 如何防止 blogdown 重新呈现所有帖子?

c# - 在 C# 中替换字符串中多次出现的句点

PHP:preg_replace文件路径