1
votes

Erreur lors de l'exécution de rbind à rmarkdown dans RStudio

Je suis nouveau avec RMarkdown et j'ai plusieurs problèmes avec les blocs de données que je veux tracer.

J'ai un bloc de données avec 3 lignes et 5 colonnes appelé a1, puis j'ai un vecteur avec cinq éléments. Comme j'ai besoin d'une nouvelle trame de données avec les deux, je fais une rbind.

a<-as.data.frame(c("a","b","c"))
b1<-c(1:3)
b2<-c(1:3)
b3<-c(1:3)
b4<-c(1:3)
a1<-cbind(a,b1,b2,b3,b4)
c<-c("Promedio",7.55,6.74,9.34,12.88)
a1<-rbind(a1,c) 

Cela semble bien fonctionner en dehors du rmarkdown mais quand je le tricot, j'ai cette erreur:

Erreur dans rbindlis (l, use.names, fill, idcol): l'élément 2 a 1 colonnes, incompatible avec l'élément 1 qui a 13 colonnes. Si à la place vous devez remplir les colonnes manquantes, utilisez la valeur TRUE de l'argument «fil». Appelle: ... eval -> eval -> rbind -> rbind -> -> rbindlist


3 commentaires

qu'est-ce qu'un a dans le cbind ci-dessus? Lorsque nous tricotons, le tricoteur n'utilise pas les variables d'environnement que vous avez créées dans votre session rstudio. Veuillez effacer votre environnement et réessayer. C'est généralement la cause de la plupart des problèmes.


Nous pourrions mieux vous aider si vous publiez un exemple minimal reproductible. Prenez votre document Rmarkdown et supprimez toutes les lignes qui ne sont pas nécessaires pour reproduire votre erreur, puis publiez ce code ici et nous pouvons vous aider à le comprendre.


Lorsque je mets votre code (fixe) avec la définition de a dans un fichier Rmd , j'obtiens l'avertissement niveau de facteur invalide, NA généré . Lorsque j'ajoute stringsAsFactors = FALSE , le code s'exécute sans erreur.


3 Réponses :


1
votes

Voici un exemple de travail minimal de ce que vous essayez de faire. C'est un exemple fonctionnel, car il reproduit votre problème d'utilisation de rbind dans un document knitr. C'est minime, car presque tout ce qui n'est pas pertinent pour reproduire votre problème a été supprimé. Essayez de tricoter ceci et si cela fonctionne, modifiez-le en fonction de vos besoins. Si vous rencontrez des problèmes, supprimez tout ce qui n'est pas nécessaire pour reproduire le problème, puis publiez le code exécutable complet afin que nous puissions l'examiner.

---
output: html_document
---

Some text

```{r}
knitr::opts_chunk$set(echo = TRUE)
df <- data.frame(text = c("a", "b"),
                b1 = 1:2,
                stringsAsFactors = FALSE)

c <- c("Promedio",7.55)
rbind(df,c)

```


0 commentaires

1
votes

Ne fonctionne pas car l'objet c est un vecteur au lieu d'un data.frame final

a<-as.data.frame(c("a","b","c"))
names(a) #Returns the ugly "c(\"a\", \"b\", \"c\")"
names(a) <- "a" 
names(a) #Returns a

b1<-c(1:3)
b2<-c(1:3)
b3<-c(1:3)
b4<-c(1:3)

a1<-cbind(a,b1,b2,b3,b4)


#c<-c("Promedio",7.55,6.74,9.34,12.88) This is a vector
#But it should be a data.frame

c <- data.frame(a = c("Promedio"),
            b1 = c(7.55),
            b2 = c(6.74),
            b3 = c(9.34),
            b4 = c(12.88))

a1 <-rbind(a1,c) 
a1


0 commentaires

0
votes

Merci beaucoup pour vos réponses mais j'ai finalement décidé de refaire toute la trame de données car cela ne fonctionnait pas du tout. Je ne suis pas en mesure de partager la base de données originale car elle est confidentielle, mais voici le script final:

#I started doing a data frame from a dcast with four quarters (trimestre I...) and
# a flag (0-1)

a<-dcast(b,RSdRTelecom~Trimestre+Fg_Deuda,fun=sum,value.var="u") 

#then I created diferent vectors for each column for the new data frame
Trimestre_I<-c(a$`1_1`/(a$`1_0`+a$`1_1`))
Trimestre_II<-c(a$`2_1`/(a$`2_0`+a$`2_1`))
Trimestre_III<-c(a$`3_1`/(a$`3_0`+a$`3_1`))
Trimestre_IV<-c(a$`4_1`/(a$`4_0`+a$`4_1`))
#Then I created a vector for the mean values 
Promedio<-c(sum(a$`1_1`)/(sum(a$`1_0`)+sum(a$`1_1`)),
     sum(a$`2_1`)/(sum(a$`2_0`)+sum(a$`2_1`)),
     sum(a$`3_1`)/(sum(a$`3_0`)+sum(a$`3_1`)),
     sum(a$`4_1`)/(sum(a$`4_0`)+sum(a$`4_1`)))

#I create a new data frame with cbind by Trimestre...
a<-cbind(Trimestre_I,Trimestre_II,Trimestre_III, Trimestre_IV)
#Then do a rbind with the mean vector 
a<-rbind(a,Promedio)
#Finnaly, I added a new vector with the names of the groups
Grupo<-c("SdR Telecom 1,2,3", "SdR Telecom 4,5", "Vacío", "Promedio")
a<-cbind(Grupo,a) 


0 commentaires