Erreur dans la Trame de Données: arguments impliquent nombre différent de lignes
En dépit de lire les questions /réponses à propos de cette Erreur, je ne sais toujours pas comment résoudre ce problème dans mon cas particulier.
- Je obtenir la somme de compléter les cas dans une liste de fichiers. Chaque fichier (par exemple, fichier1 correspond à un id (e.g id1 pour fichier1). Mon objectif est d'obtenir un bloc de données avec le nombre de cas pour chaque id (donc pour chaque fichier, comme fichier1 contient les polluants de id1, et fichier2 contient les polluants de id2 et ainsi de suite)
Quand je lance la fonction: complete("pollu", 1:10)
--> tout fonctionne parfaitement
Mais lorsque j'exécute les fonctions:
complete("pollu", 34)
Je obtenir l'ID 34 fois, avec 33 fois le retour NA et enfin de retourner le nombre de cas.
complete(".", c(2, 4, 8, 10, 12))
J'obtiens l'erreur:
Une erreur dans les données.cadre(id, nobs) : arguments impliquent nombre différent de
lignes: 5, 12
Toute aide sur la compréhension de l'erreur et de la fixation des il serait appréciée.
complete <- function(directory,id=1:332) {
nobs <- vector()
files <- list.files(directory)
for (i in id) {
ID <- id
file <- read.csv(files[i])
nobs[i] <- sum(complete.cases(file),na.rm = TRUE)
}
df <- data.frame(ID,nobs)
colnames(df) <- c("ID", "nobs")
return (df)
}
Vous devez vous connecter pour publier un commentaire.
Le problème réside dans la boucle for et la façon dont vous avez attribué une valeur à
nobs[i]
La boucle ne s'exécute une fois avec
i <- 34
. Mais vous attribuer un résultat ànobs[i]
, qui est en faitnobs[34]
. Cela vous donne un vecteur avec la 34e session de la valeur assigné, en laissant les autresNA
par défaut.Itération de la boucle au-dessus de votre 5 valeurs. Le plus important étant 12. Dans la dernière itération vous affectez une valeur à
nobs[12]
de sorte que votrenobs
vecteur a longueur de 12, tandis quei
n'a qu'une longueur de 5.De fixer
je prend les valeurs 1, 2, 3.. jusqu'à le nombre d'identifiants vous avez besoin.
MODIFIER
Comme
id
contient déjà les étiquettes de votre besoin, vous pouvez utiliserid
commeID
. Vous pouvez le faire plus facilement en utilisantid
directement dans votredata.frame