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

Удалить строки с пустыми значениями в одном столбце

Я работаю над большим набором данных, с некоторыми строками с 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 - есть ли подобная команда для удаления пробелов?

4b9b3361

Ответ 1

 df[!(is.na(df$start_pc) | df$start_pc==""), ]

Ответ 2

Это одна и та же конструкция - просто тест для пустых строк, а не 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)), ])

Отказ от ответственности: я не тестировал этот код. Пожалуйста, дайте мне знать, если есть синтаксические ошибки где-либо

Ответ 3

Легким подходом было бы создание всех пустых ячеек NA и сохранение только полных случаев. Вы также можете посмотреть примеры na.omit. Это широко обсуждаемая тема.

DF [DF == ""] & ЛТ; -п

DF < -df [complete.cases(ДФ),]

Ответ 4

Альтернативным решением может быть удаление строк с пробелами в одной переменной:

df <- subset(df, VAR != "")

Ответ 5

Элегантное решение с помощью dplyr:

df %>%
  # recode empty strings "" by NAs
  na_if("") %>%
  # remove NAs
  na.omit