Remove NA strings from table (characters) in R
如何在 R 中删除一个简单数据框中的 NA 字符串,如下面的,它由单列组成?
1 2 3 4 5 | head(test) Column1 [1]"Gene1 Gene2 Gene3 NA NA NA NA" [2]"Gene41 NAGene218 GeneX NA" [3]"Gene19 GeneNA NA NA NA NA NA" |
有些基因以 \\'NA\\' 开头或结尾,因此为了避免摆脱那些 NA,gsub 正则表达式必须指定 NA 在字符串中的位置...类似于:
[更新] - 期望的输出
1 2 3 4 5 | head(test2) Column1 [1]"Gene1 Gene2 Gene3" [2]"Gene41 NAGene218 GeneX" [3]"Gene19 GeneNA" |
你可以使用
1 | test$Column1 <- gsub("^NA(?:\\\\s+NA)*\\\\b\\\\s*|\\\\s*\\\\bNA(?:\\\\s+NA)*$","", test$Column1) |
查看正则表达式演示
详情
-
^NA(?:\\s+NA)*\\b\\s* - 备选方案 1:-
^ - 字符串的开头 -
NA -NA 字符串 -
(?:\\s+NA)* - 0 次或多次重复 1 个空格和NA 文本 -
\\b - 确保有单词边界(不应该出现NAGene 匹配) -
\\s* - 0 个空格
-
-
| - 或 -
\\s*\\bNA(?:\\s+NA)*$ - 备选方案 2:-
\\s* - 0 个空格 -
\\b - 确保有单词边界(不应该出现GeneNA 匹配) -
NA -NA 字符串 -
(?:\\s+NA)* - 0 次或多次重复 1 个空格和NA 文本 -
$ - 字符串结束。
-
从
1 2 3 4 5 6 7 8 | library(tidyverse) test <- tibble(column1 = c("Gene1 Gene2 Gene3 NA NA NA NA" , "Gene41 NAGene218 GeneX NA", "Gene19 GeneNA NA NA NA NA NA")) test %>% mutate(column1 = str_remove_all(column1," NA|NA")) |
或:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | library(stringr) library(tidyverse) x <- c("Gene1 Gene2 Gene3 NA NA NA NA","Gene41 NAGene218 GeneX NA","Gene19 GeneNA NA NA NA NA NA") str_split(x,"\\\\s", simplify = TRUE) %>% as_tibble() %>% mutate_all(~str_remove(.x,"^(NA)|(NA)$")) # V1 V2 V3 V4 V5 V6 V7 # <chr> <chr> <chr> <chr> <chr> <chr> <chr> # 1 Gene1 Gene2 Gene3"" "" "" "" # 2 Gene41 Gene218 GeneX"" "" "" "" # 3 Gene19 Gene "" "" "" "" "" |