【问题标题】:R - Adding a total row in Excel outputR - 在 Excel 输出中添加总行
【发布时间】:2018-03-22 16:09:59
【问题描述】:

我想在工作表中写入我的 data.frame 时添加一个总行(如在 Excel 表中)。 这是我现在的代码(使用openxlsx):

writeDataTable(wb=WB, sheet="Data", x=X, withFilter=F, bandedRows=F, firstColumn=T)

X 包含一个带有 8 个字符变量和 1 个数字变量的 data.frame。因此,总行应该只包含数字行的总和(如果我能以某种方式添加 Excel 总行功能,就像我在将表写入工作簿对象而不是手动添加总行时对 firstColumn 所做的那样) .

我在 StackOverflow 和官方 openxslx 文档中都搜索了解决方案,但无济于事。请使用openxlsx提出解决方案。

编辑:

添加数据样本:

A  B  C  D  E  F  G  H  I
a  b  s  r  t  i  s  5  j
f  d  t  y  d  r  s  9  s
w  s  y  s  u  c  k  8  f

总行之后:

    A  B  C  D  E  F  G  H  I
    a  b  s  r  t  i  s  5  j
    f  d  t  y  d  r  s  9  s
    w  s  y  s  u  c  k  8  f
    na na na na na na na 22 na

【问题讨论】:

  • 请提出改进​​问题的建议,而不要先完全否决。

标签: r excel openxls


【解决方案1】:
library(janitor)
adorn_totals(df, "row")

#>      A B C D E F G  H I
#>      a b s r t i s  5 j
#>      f d t y d r s  9 s
#>      w s y s u c k  8 f
#>  Total - - - - - - 22 -

如果您更喜欢空格而不是字符列中的-,您可以指定fill = ""fill = NA

【讨论】:

    【解决方案2】:

    假设您的数据存储在名为 df 的 data.frame 中:

    df <- read.table(text = 
        "A  B  C  D  E  F  G  H  I
        a  b  s  r  t  i  s  5  j
        f  d  t  y  d  r  s  9  s
        w  s  y  s  u  c  k  8  f", 
                     header = TRUE,
                     stringsAsFactors = FALSE)
    

    您可以使用lapply创建一行

    totals <- lapply(df, function(col) {
      ifelse(!any(!is.numeric(col)), sum(col), NA)
    })
    

    并使用rbind()将其添加到df

    df <- rbind(df, totals)
    
    head(df)
         A    B    C    D    E    F    G  H    I
    1    a    b    s    r    t    i    s  5    j
    2    f    d    t    y    d    r    s  9    s
    3    w    s    y    s    u    c    k  8    f
    4 <NA> <NA> <NA> <NA> <NA> <NA> <NA> 22 <NA>
    

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2014-06-30
      • 2020-07-11
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多