Удалить строки NA из таблицы (символы) в R - PullRequest
1 голос
/ 16 октября 2019

Как я могу удалить строки 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', поэтому, чтобы избежать избавления от этих NA, регулярное выражение gsub должно указывать позицию NA в строке ... Что-то вроде: test2 <- gsub('^ NA$', "", test$Column1), с ^, указывающим, что 'NA' должно быть в начале, а $ в конце строки ... Я уверен, что это что-то простое, но я не понимаю, что я делаю неправильно? (Поскольку я не очень знаком с этими символами регулярных выражений)

[ОБНОВЛЕНИЕ] - Желаемый вывод

head(test2)
Column1 
[1] "Gene1 Gene2 Gene3" 
[2] "Gene41 NAGene218 GeneX"
[3] "Gene19 GeneNA"

Ответы [ 3 ]

3 голосов
/ 16 октября 2019

Вы можете использовать

test$Column1 <- gsub("^NA(?:\\s+NA)*\\b\\s*|\\s*\\bNA(?:\\s+NA)*$", "", test$Column1)

См. Демоверсию regex

Подробности

  • ^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 string
    • (?:\s+NA)* - 0 или более повторений 1+ пробелов и NA text
    • $ - конец строки.
0 голосов
/ 16 октября 2019

Или:

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    ""    ""    ""    ""    ""   
0 голосов
/ 16 октября 2019

Попробуйте это от 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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...