Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的表(字符)中删除NA字符串_R_Regex_Gsub - Fatal编程技术网

从R中的表(字符)中删除NA字符串

从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

如何在一个简单的数据帧中删除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(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)