Ответ 1
df[!(is.na(df$start_pc) | df$start_pc==""), ]
Я работаю над большим набором данных, с некоторыми строками с NA и другими с пробелами:
df <- data.frame(ID = c(1:7),
home_pc = c("","CB4 2DT", "NE5 7TH", "BY5 8IB", "DH4 6PB","MP9 7GH","KN4 5GH"),
start_pc = c(NA,"Home", "FC5 7YH","Home", "CB3 5TH", "BV6 5PB",NA),
end_pc = c(NA,"CB5 4FG","Home","","Home","",NA))
Как удалить NA и пробелы за один раз (в столбцах start_pc и end_pc)? В прошлом я использовал:
df<- df[-which(is.na(df$start_pc)), ]
... удалить NA - есть ли подобная команда для удаления пробелов?
df[!(is.na(df$start_pc) | df$start_pc==""), ]
Это одна и та же конструкция - просто тест для пустых строк, а не NA
:
Попробуйте следующее:
df <- df[-which(df$start_pc == ""), ]
На самом деле, глядя на ваш код, вам не нужен which
, но вместо этого используйте отрицание, поэтому вы можете упростить его:
df <- df[!(df$start_pc == ""), ]
df <- df[!is.na(df$start_pc), ]
И, конечно, вы можете объединить эти два утверждения следующим образом:
df <- df[!(df$start_pc == "" | is.na(df$start_pc)), ]
И упростите его еще с with
:
df <- with(df, df[!(start_pc == "" | is.na(start_pc)), ])
Вы также можете проверить ненулевую длину строки, используя nzchar
.
df <- with(df, df[!(nzchar(start_pc) | is.na(start_pc)), ])
Отказ от ответственности: я не тестировал этот код. Пожалуйста, дайте мне знать, если есть синтаксические ошибки где-либо
Легким подходом было бы создание всех пустых ячеек NA и сохранение только полных случаев. Вы также можете посмотреть примеры na.omit. Это широко обсуждаемая тема.
DF [DF == ""] & ЛТ; -п
DF < -df [complete.cases(ДФ),]
Альтернативным решением может быть удаление строк с пробелами в одной переменной:
df <- subset(df, VAR != "")
Элегантное решение с помощью dplyr:
df %>%
# recode empty strings "" by NAs
na_if("") %>%
# remove NAs
na.omit