У нас есть фрейм данных из файла CSV. Во фрейме данных DF
есть столбцы, содержащие наблюдаемые значения, и столбец ( VaR2
), содержащий дату, когда было выполнено измерение. Если дата не была записана, CSV-файл содержит значение NA
для отсутствующих данных.
Var1 Var2
10 2010/01/01
20 NA
30 2010/03/01
Мы хотели бы использовать команду subset для определения нового фрейма данных new_DF
, чтобы он содержал только строки, которые имеют NA'
значение из столбца ( VaR2
). В приведенном примере в новом будет содержаться только строка 2 DF
.
Команда
new_DF<-subset(DF,DF$Var2=="NA")
не работает, итоговый фрейм данных не содержит записей строк.
Если в исходном файле CSV ценен NA
обмениваются с NULL
, та же команда производит желаемый результат: new_DF<-subset(DF,DF$Var2=="NULL")
.
Как я могу заставить этот метод работать, если для символьной строки значение NA
указано в исходном CSV-файле?
new_DF <- DF[is.na(DF$Var),]
, т.е. после него должна быть дополнительная(
скобкаDF[
?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))
источник
complete.cases
дает,TRUE
когда все значения в строке неNA
источник
Это должно создать новый фрейм данных (
new_data
) только с недостающими значениями в нем.Лучше всего работает для отслеживания значений, которые вы могли бы впоследствии потерять, потому что в них были столбцы с отсутствующими наблюдениями (NA).
источник
Попробуйте изменить это:
источник
DF %>% filter(is.na(Var2))
послеlibrary(dplyr)
.Печатает все строки с данными NA:
tmp <- data.frame(c(1,2,3),c(4,NA,5)); tmp[round(which(is.na(tmp))/ncol(tmp)),]
источник