Подтвердить что ты не робот

Подмножество строк, содержащих значения NA (отсутствует) в выбранном столбце кадра данных

У нас есть кадр данных из файла CSV. В кадре данных DF имеются столбцы, содержащие наблюдаемые значения и столбец (VaR2), который содержит дату, в которую было выполнено измерение. Если дата не была записана, файл CSV содержит значение NA, для отсутствия данных.

Var1  Var2 
10   2010/01/01
20   NA
30   2010/03/01

Мы хотели бы использовать команду подмножества для определения нового фрейма данных new_DF, чтобы он содержал только строки со значением NA' из столбца (VaR2). В приведенном примере в новом DF будет содержаться только строка 2.

Команда

new_DF<-subset(DF,DF$Var2=="NA") 

не работает, результирующий фрейм данных не имеет записей в строке.

Если в исходном CSV файле значение NA обменивается с NULL, эта же команда дает желаемый результат: new_DF<-subset(DF,DF$Var2=="NULL").

Как я могу заставить этот метод работать, если для символьной строки значение NA указано в исходном CSV файле?

4b9b3361

Ответ 1

Никогда не используйте == 'NA' для проверки отсутствующих значений. Вместо этого используйте is.na(). Это должно сделать это:

new_DF <- DF[rowSums(is.na(DF)) > 0,]

или если вы хотите проверить конкретный столбец, вы также можете использовать

new_DF <- DF[is.na(DF$Var),]

Если у вас есть значения символов NA, сначала запустите

Df[Df=='NA'] <- NA

чтобы заменить их отсутствующими значениями.

Ответ 2

NA - специальное значение в R, не смешивайте значение NA с строкой "NA". В зависимости от способа импорта данных ваши ячейки "NA" и "NULL" могут иметь различный тип (поведение по умолчанию заключается в преобразовании строк "NA" в значения NA, а строки "NULL" - как есть).

Если вы используете read.table() или read.csv(), вы должны рассмотреть аргумент "na.strings" для чистого импорта данных и всегда работать с реальными значениями R NA.

Пример, работающий в обоих случаях: "NULL" и "NA":

DF <- read.csv("file.csv", na.strings=c("NA", "NULL"))
new_DF <- subset(DF, is.na(DF$Var2))

Ответ 3

complete.cases дает TRUE, когда все значения в строке не NA

DF[!complete.cases(DF), ]

Ответ 4

Попробуйте изменить это:

new_DF<-dplyr::filter(DF,is.na(Var2)) 

Ответ 5

Печатает все строки с данными NA:

tmp <- data.frame(c(1,2,3),c(4,NA,5));
tmp[round(which(is.na(tmp))/ncol(tmp)),]