J'ai un jeu de données avec des lignes vides. Je voudrais les enlever:
myData<-myData[-which(apply(myData,1,function(x)all(is.na(x)))),]
Cela fonctionne bien. Mais maintenant, je voudrais ajouter une colonne dans mes données et initialiser la première valeur:
myData$newCol[1] <- -999
Error in `$<-.data.frame`(`*tmp*`, "newCol", value = -999) :
replacement has 1 rows, data has 0
Malheureusement, cela ne fonctionne pas et je ne comprends pas vraiment pourquoi et je ne peux pas résoudre ceci .
TgData = TgData[2:nrow(TgData),]
Ou quelque chose de similaire.
Cela fonctionne également lorsque je n'ai utilisé que les 13 000 premières lignes.
Mais cela ne fonctionne pas avec mes données réelles, avec 32 000 lignes.
Qu'ai-je fait de mal? Cela semble n'avoir aucun sens pour moi.
Je suppose que vous voulez supprimer les lignes qui sont toutes des NA. Ensuite, vous pouvez faire ce qui suit:
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
Si vous souhaitez supprimer les lignes comportant au moins un NA, modifiez simplement la condition:
data[rowSums(is.na(data)) == 0,]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 6 7
Si vous avez des lignes vides, pas des NA, vous pouvez faire:
data[!apply(data == "", 1, all),]
Pour supprimer les deux (NA et vide):
data <- data[!apply(is.na(data) | data == "", 1, all),]
Voici quelques options dplyr
:
# sample data
df <- data.frame(a = c('1', NA, '3', NA), b = c('a', 'b', 'c', NA), c = c('e', 'f', 'g', NA))
library(dplyr)
# remove rows where all values are NA:
df %>% filter_all(any_vars(!is.na(.)))
df %>% filter_all(any_vars(complete.cases(.)))
# remove rows where only some values are NA:
df %>% filter_all(all_vars(!is.na(.)))
df %>% filter_all(all_vars(complete.cases(.)))
# or more succinctly:
df %>% filter(complete.cases(.))
df %>% na.omit
# dplyr and tidyr:
library(tidyr)
df %>% drop_na
Solution alternative pour les lignes de NA
s utilisant janitor
package
myData %>% remove_empty("rows")
Ceci est similaire à certaines des réponses ci-dessus, mais avec cela, vous pouvez spécifier si vous souhaitez supprimer les lignes avec un pourcentage de valeurs manquantes supérieur ou égal à un pourcentage donné (avec l'argument pct
)
drop_rows_all_na <- function(x, pct=1) x[!rowSums(is.na(x)) >= ncol(x)*pct,]
Où x
est une image et pct
est le seuil de NA
- données remplies dont vous souhaitez vous débarrasser.
pct = 1
signifie supprimer les lignes ayant 100% de ses valeurs NA
.pct = .5
signifie que quelques lignes ont au moins la moitié de ses valeurs NA