Исключить пробел и NA в R

Возможный дубликат:
R - удалить строки с NA в data.frame

У меня есть фрейм данных с именем sub.new с несколькими столбцами. И я пытаюсь исключить любую ячейку, содержащую NA или blank space "".
I tried to use subset(), но она нацелена на определенный условный столбец. Есть ли способ просканировать весь фрейм данных и создать подмножество, в котором ни одна ячейка не является ни NA, ни blank space?

В приведенном ниже примере следует оставить только первую строку:

# ID               SNP             ILMN_Strand   Customer_Strand
ID1234              [A/G]          TOP           BOT
Non-Specific        NSB (Bgnd)     Green
Non-Polymorphic     NP (A)         Red
Non-Polymorphic     NP (T)         Purple
Non-Polymorphic     NP (C)         Green
Non-Polymorphic     NP (G)         Blue
Restoration         Restore        Green

Какие-либо предложения? Спасибо


r na
person lusketeer    schedule 06.10.2012    source источник
comment
что у них не получилось? Можете ли вы привести нам некоторые примеры данных?   -  person Chase    schedule 07.10.2012
comment
Вы работаете с векторами? Датафреймы? Если кадры данных, что вы хотите, должно произойти, если только один элемент в строке пуст или NA? Пожалуйста, предоставьте более подробную информацию.   -  person Dason    schedule 07.10.2012
comment
Я искал, но не получается.   -  person lusketeer    schedule 07.10.2012
comment
@ user1301840: поиск в Google R удалить строки с NA или поиск в StackOverflow с этой фразой дают приведенный выше вопрос как лучший результат.   -  person David Robinson    schedule 07.10.2012
comment
На этот вопрос есть несколько хороших ответов о дополнительных способах удаления NA из набор данных.   -  person Bas    schedule 23.03.2016


Ответы (2)


Хорошей идеей будет установить для всех "" (пустых ячеек) значение NA перед любым дальнейшим анализом.

Если вы читаете свой ввод из файла, хорошим выбором будет приведение всех "" к NA:

foo <- read.table(file="Your_file.txt", na.strings=c("", "NA"), sep="\t") # if your file is tab delimited

Если у вас уже загружена таблица, вы можете действовать следующим образом:

foo[foo==""] <- NA

Затем, чтобы сохранить только строки без NA, вы можете просто использовать na.omit():

foo <- na.omit(foo)

Или сохранить столбцы без NA:

foo <- foo[, colSums(is.na(foo)) == 0] 
person Ali    schedule 06.10.2012
comment
Это помогает, но удаляет все строки. Думаю, мне все еще нужно сузить круг до столбцов, которые я хочу проверить на NA. Спасибо за помощь - person lusketeer; 07.10.2012
comment
Спасибо за этот ответ! Действительно, выше вопрос задавался раньше, но если у вас есть пустые ячейки, а не ячейки NA, то это очень полезно. - person Simone; 29.04.2016
comment
Уточните, пожалуйста, что такое na.omit? В R 3.1.1 нет пакета na. - person Léo Léopold Hertz 준영; 30.10.2016
comment
@LéoLéopoldHertz준영, na.omit() — это функция в базовом пакете R. Точки не обозначают функции в R, как в Python. - person Matt; 04.10.2017
comment
С помощью dplyr это можно написать коротко и читабельно, например так: foo %>% na_if("") %>% na.omit - person Agile Bean; 13.08.2019

Не знаю точно, какой у вас набор данных, поэтому я даю общий ответ.

x <- c(1,2,NA,3,4,5)
y <- c(1,2,3,NA,6,8)
my.data <- data.frame(x, y)
> my.data
   x  y
1  1  1
2  2  2
3 NA  3
4  3 NA
5  4  6
6  5  8
# Exclude rows with NA values
my.data[complete.cases(my.data),]
  x y
1 1 1
2 2 2
5 4 6
6 5 8
person Andrej    schedule 06.10.2012
comment
это тоже исключает? - person lusketeer; 07.10.2012
comment
Нет. Я предлагаю вам сначала определить, какие значения NA есть в вашем наборе данных. - person Andrej; 07.10.2012
comment
Вы можете сначала преобразовать значения в NA, выполнив что-то подобное этому my.data[my.data == ""] <- NA, а затем использовать предоставленный ответ. - person Dason; 07.10.2012
comment
@ Андрей Я не совсем понимаю, что за значения NA, все показывает только NA. - person lusketeer; 07.10.2012
comment
Вы должны перекодировать все вхождения в NA, как предлагает @Dason - person Andrej; 07.10.2012
comment
спасибо за всю помощь, я думаю, что я хорошо отсюда сейчас. - person lusketeer; 07.10.2012