Удаление пустых строк файла данных в R
У меня есть набор данных с пустыми строками. Я хотел бы удалить их:
myData<-myData[-which(apply(myData,1,function(x)all(is.na(x)))),]
Он работает нормально. Но теперь я хотел бы добавить столбец в свои данные и инициализировать первое значение:
myData$newCol[1] <- -999
Error in `$<-.data.frame`(`*tmp*`, "newCol", value = -999) :
replacement has 1 rows, data has 0
К сожалению, это не работает, и я не понимаю, почему, и я не могу это решить.
Он работал, когда я удалял одну строку за раз, используя:
TgData = TgData[2:nrow(TgData),]
Или что-то подобное.
Он также работает, когда я использовал только первые 13 000 строк.
Но это не работает с моими фактическими данными с 32 000 строк.
Что я сделал неправильно? Мне кажется, это не имеет смысла.
Ответы
Ответ 1
Я предполагаю, что вы хотите удалить строки, которые являются всеми NA. Затем вы можете сделать следующее:
data <- rbind(c(1,2,3), c(1, NA, 4), c(4,6,7), c(NA, NA, NA), c(4, 8, NA)) # sample data
data
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 NA 4
[3,] 4 6 7
[4,] NA NA NA
[5,] 4 8 NA
data[rowSums(is.na(data)) != ncol(data),]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 NA 4
[3,] 4 6 7
[4,] 4 8 NA
Если вы хотите удалить строки, имеющие хотя бы один NA, просто измените условие:
data[rowSums(is.na(data)) == 0,]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 6 7
Ответ 2
Если у вас есть пустые строки, а не NA, вы можете сделать:
data[!apply(data == "", 1, all),]
Чтобы удалить оба (NA и пустое):
data <- data[!apply(is.na(data) | data == "", 1, all),]
Ответ 3
Это похоже на некоторые из приведенных выше ответов, но при этом вы можете указать, хотите ли вы удалить строки с процентом пропущенных значений, большим или равным данному проценту (с аргументом pct
)
drop_rows_all_na <- function(x, pct=1) x[!rowSums(is.na(x)) >= ncol(x)*pct,]
Где x
- это фрейм данных, а pct
- порог данных NA
-filled, от которых вы хотите избавиться.
pct = 1
означает удаление строк, которые имеют 100% своих значений NA
. pct =.5
означает строки remome, которые имеют как минимум половину своих значений NA
Ответ 4
Альтернативное решение для рядов NA
с использованием пакета janitor
myData %>% remove_empty("rows")