Ошибка выполнения rbind при rmarkdown в RStudio

Я новичок в использовании RMarkdown, и у меня есть несколько проблем с фреймами данных, которые я хочу построить.

У меня есть фрейм данных с 3 строками и 5 столбцами с именем a1, а затем у меня есть вектор с пятью элементами. Поскольку мне нужен новый фрейм данных с ними обоими, я делаю 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) 

Кажется, он хорошо работает за пределами rmarkdown, но когда я его вяжу, у меня возникает эта ошибка:

Ошибка в rbindlis(l, use.names, fill, idcol): элемент 2 имеет 1 столбец, что несовместимо с элементом 1, который имеет 13 столбцов. Если вместо этого вам нужно заполнить отсутствующие столбцы, используйте для аргумента 'fil' значение TRUE. Вызовы: ... eval -> eval -> rbind -> rbind -> -> rbindlist


person vero    schedule 11.09.2019    source источник
comment
что такое a в cbind выше? Когда мы вяжем, вязальщица не использует переменные среды, созданные вами в сеансе rstudio. Пожалуйста, очистите среду и повторите попытку. Обычно это является причиной большинства проблем.   -  person Sada93    schedule 11.09.2019
comment
Мы могли бы лучше помочь вам, если бы вы опубликовали минимальный воспроизводимый пример. Возьмите свой документ Rmarkdown и удалите все строки, которые не нужны для воспроизведения вашей ошибки, затем разместите этот код здесь, и мы поможем вам разобраться.   -  person Gregory    schedule 11.09.2019
comment
Когда я помещаю ваш (исправленный) код с определением a в файл Rmd, я получаю предупреждение invalid factor level, NA generated. Когда я добавляю stringsAsFactors = FALSE, код работает без ошибок.   -  person Ralf Stubner    schedule 11.09.2019


Ответы (3)


Вот минимальный рабочий пример того, что вы пытаетесь сделать. Это рабочий пример, потому что он воспроизводит вашу проблему с использованием rbind в документе Knitr. Это минимально, потому что почти все, что не имеет отношения к воспроизведению вашей проблемы, было удалено. Попробуйте связать это, и если это сработает, измените его в соответствии с вашими потребностями. Если у вас есть проблемы, удалите все, что не нужно для воспроизведения проблемы, а затем опубликуйте полный исполняемый код, чтобы мы могли его посмотреть.

---
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)

```
person Gregory    schedule 11.09.2019

Не работает, потому что объект c является вектором, а не data.frame

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
person Orlando Sabogal    schedule 11.09.2019

Большое спасибо за ваши ответы, но я, наконец, решил снова сделать весь фрейм данных, так как он вообще не работал. Я не могу поделиться исходной базой данных, так как она конфиденциальна, но это окончательный сценарий:

#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) 

person vero    schedule 12.09.2019