从R中的表(字符)中删除NA字符串
如何在一个简单的数据帧中删除NA字符串,如下面的一个,它由R中的单个列组成从R中的表(字符)中删除NA字符串,r,regex,gsub,R,Regex,Gsub,如何在一个简单的数据帧中删除NA字符串,如下面的一个,它由R中的单个列组成 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”开头或结尾,因此为了避免去掉这些NAs,gsub正则表达式必须指定NA在字符串中的位置。。。比如: test2从stringr尝试以下操作: library
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”开头或结尾,因此为了避免去掉这些NAs,gsub正则表达式必须指定NA在字符串中的位置。。。比如:
test2从stringr
尝试以下操作:
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"))
库(tidyverse)
测试%
突变(第1列=str_remove_all(第1列,“NA | NA”))
或:
库(stringr)
图书馆(tidyverse)
x%
as_tible()%>%
突变所有(~str_remove(.x,“^(NA)|(NA)$”)
#V1 V2 V3 V4 V5 V6 V7
#
#1基因1基因2基因3“”
#2 Gene41 Gene218 GeneX“”
#3基因19基因“”“”“”
您可以使用
test$Column1 <- gsub("^NA(?:\\s+NA)*\\b\\s*|\\s*\\bNA(?:\\s+NA)*$", "", test$Column1)
test$Column1你能在“Gene41-nagne218-GeneX-NA”上试一试吗
试一试,没有看到其他的NA。对不起,我应该更清楚所需的输出(我现在更新了帖子以包含此内容)。谢谢你的建议,但是这个命令对我的情况不起作用,因为它也删除了以NA开头的基因(在我的例子中是nagne218)?请为示例显示它。您好,我已经更新了帖子,以便更清楚地了解所需的输出@Clemsang,很遗憾,你的建议不起作用,因为有些基因名称以NA开头-第一次出现以“NA”开头的基因时,输出就会被削减。谢谢你的建议,但这也不起作用,因为它也从基因名称中删除了NAs(GeneNA变成了gene,而Nagne218变成了Gene218)。很抱歉,我没有更清楚地说明所需的输出,但我现在已经更新了原始问题。仅供参考:如果您发现性能问题或任何奇怪的行为,请将perl=TRUE
参数添加到gsub
,gsub(^NA(?:\\s+NA)*\\b\\s*\\s*\\bNA(?\\s+NA)*$,“”,test Column1 perl=TRUE)
谢谢,这工作做得很好!!(实际上,没有perl选项,它工作得很好)(我真的认为这将是一个相对容易的问题,但是这个正则表达式的复杂性是不可能的——至少乍一看是这样的哈哈)
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 "" "" "" "" ""
test$Column1 <- gsub("^NA(?:\\s+NA)*\\b\\s*|\\s*\\bNA(?:\\s+NA)*$", "", test$Column1)