【问题标题】:Error doing rbind at rmarkdown in RStudio在 RStudio 的 rmarkdown 处执行 rbind 时出错
【发布时间】:2020-01-13 10:21:19
【问题描述】:

我是使用 RMarkdown 的新手,我想绘制的数据框有几个问题。

我有一个名为 a1 的 3 行 5 列数据框,然后我有一个包含五个元素的向量。因为我需要一个新的数据框,所以我做了一个 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

【问题讨论】:

  • 上面cbind中的a是什么?当我们编织时,编织器不会使用您在 rstudio 会话中创建的环境变量。请清除您的环境,然后重试。这通常是大多数问题的原因。
  • 如果您发布一个最小的可重现示例,我们可以更好地帮助您。获取您的 Rmarkdown 文档并删除重现错误所不需要的所有行,然后在此处发布该代码,我们可以帮助您解决问题。
  • 当我将带有a 定义的(固定)代码放入Rmd 文件时,我收到警告invalid factor level, NA generated。当我添加stringsAsFactors = FALSE 时,代码运行没有错误。

标签: r dataframe r-markdown rbind


【解决方案1】:

这是您尝试做的一个最小的工作示例。这是一个工作示例,因为它重现了您在 knitr 文档中使用 rbind 的问题。这是最小的,因为与重现您的问题无关的大部分内容都已被删除。试着编织这个,如果它有效,然后修改它以满足您的需要。如果您遇到问题,请去掉重现问题所不需要的所有内容,然后发布完整的可运行代码,以便我们查看。

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

```

【讨论】:

    【解决方案2】:

    不工作,因为对象 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
    

    【讨论】:

      【解决方案3】:

      非常感谢您的回答,但我最终决定再次执行所有数据框,因为它根本不起作用。我无法共享原始数据库,因为它是机密的,但这是最终脚本:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-11
        • 2014-12-04
        • 1970-01-01
        • 2019-01-31
        • 2015-06-13
        • 2016-05-04
        • 1970-01-01
        • 2021-04-02
        相关资源
        最近更新 更多