【问题标题】:R - keep summation column from a tibble for a table in RmarkdownR - 为 Rmarkdown 中的表保留小标题中的总和列
【发布时间】:2020-10-19 21:53:01
【问题描述】:

我是 R 新手。到目前为止,我已经设法为我的问题找到解决方案并调整我的代码。但是,我已经 2 天没能解决以下问题。可能有一个非常简单的解决方案,但我的技能太有限了。提前抱歉(也为我的英语)。

我尝试仅根据特定值范围从一列中排序数值。 最终目标是在 Rmarkdown 文件中创建一个表格,其中列出了这些值在其代表范围内的总和。

到目前为止,我只设法创建了一个带有求和列的小标题。不幸的是,我卡在那里。即使我将 int- 转换为 dbl-column,我也无法传输/保留求和列。编织文件仍然只以非汇总方式显示标签(1 级、2 级……)。当我尝试打印它时也会发生这种情况。总和会消失。

tl;dr:我怎样才能保留这个总和列,以便在 Rmarkdown 的表中使用它?

感谢您的建议!


library(tidyverse)
library(knitr)


a <-  c(12.3, 13.8, 14.5, 15.4, 16.5, 12.7, 14.2, 16.1, 13.9, 18)
a

## [1] 12.3 13.8 14.5 15.4 16.5 12.7 14.2 16.1 13.9 18.0

b <- cut(a, c(-Inf, '12', '13', '14', '15', '16', '17', Inf), labels=c('Level 1', 'Level 2', 'Level 3', 'Level 4', 'Level 5', 'Level 6', 'Level 7'))

table(b)

## b
## Level 1 Level 2 Level 3 Level 4 Level 5 Level 6 Level 7 
##       0       2       2       2       1       2       1

class(b)

## [1] "factor"

b <- as.data.frame(b)

b %>% 
group_by(b, .drop = FALSE) %>% 
dplyr::summarise(Numbers = n()) %>%       
mutate(Numbers = rowSums(.[-1]))

## `summarise()` ungrouping output (override with `.groups` argument)

## # A tibble: 7 x 2
##   b       Numbers
##   <fct>     <dbl>
## 1 Level 1       0
## 2 Level 2       2
## 3 Level 3       2
## 4 Level 4       2
## 5 Level 5       1
## 6 Level 6       2
## 7 Level 7       1

class(b)

## [1] "data.frame"

print(as_tibble(b))

## # A tibble: 10 x 1
##    b      
##    <fct>  
##  1 Level 2
##  2 Level 3
##  3 Level 4
##  4 Level 5
##  5 Level 6
##  6 Level 2
##  7 Level 4
##  8 Level 6
##  9 Level 3
## 10 Level 7

kable(b)

b

Level 2
Level 3
Level 4
Level 5
Level 6
Level 2
Level 4
Level 6
Level 3
Level 7         

【问题讨论】:

    标签: r r-markdown knitr tibble


    【解决方案1】:

    您只是忘记保存更新后的 b 对象 :)

    b <- as.data.frame(b)
    
    b <- b %>% 
    group_by(b, .drop = FALSE) %>% 
    dplyr::summarise(Numbers = n()) %>%       
    mutate(Numbers = rowSums(.[-1]))
    

    或者你可以像这样从第一行开始管道:

    b <- as.data.frame(b) %>% 
    group_by(b, .drop = FALSE) %>% 
    dplyr::summarise(Numbers = n()) %>%       
    mutate(Numbers = rowSums(.[-1]))
    

    【讨论】:

    • 天哪,我知道这应该很容易。非常感谢!
    • @tsch 没问题!发生在我们最好的人身上。
    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多