首页 > 解决方案 > 如何在R中的数据表中添加包含每列总计的行

问题描述

我正在处理 R 中的下表,并希望添加包含每列总数的最后一行。我使用了这段代码:

janitor::adorn_totals("row", fill = "-",na.rm = TRUE)

但得到每列的总和。但是,我只想要选定列的总和(人口、病例和死亡),但我还想将总发病率计算为(总病例/总人口*10000)和总病死率作为(总死亡/总病例* 100)。由于我是 R 的新用户,因此我将非常感谢您的帮助。

tab <- read.table(sep = ";", dec = ".", check.names = FALSE, stringsAsFactors = FALSE, header = TRUE,
text = "
Area;  Population;  Cases;  Attack Rate (per 100000);  Deaths;  CFR (%)
A;     216767;        18;                       8.3;       0;        0
B;     181160;        17;                       9.4;       0;        0
C;     478978;       717;                      87.1;      16;      3.8
D;     446411;        13;                       2.9;       0;        0
E;     268476;         3;                       1.1;       0;        0
F;     494289;        45;                       9.1;       2;      4.4
G;     106303;         9;                       8.5;       0;        0
H;     173990;         8;                       4.6;       0;        0
")

标签: r

解决方案


它更容易计算派生列Attack Rate,并且CFR只有在计算了总和之后。

然后,您可以使用基本的 tidyverse 函数首先生成一个仅包含摘要的 1 行表。您将其添加到原始数据帧并最后计算攻击率和 CFR。

library(dplyr)
# Start with non-derived columns only
tab1 <- tab %>% select(Area, Population, Cases, Deaths)

# Summarise into a new data frame with one row
summ <- tab1 %>% 
  select(-Area) %>% # cannot sum() this column
  summarise_all(sum) %>% 
  mutate(Area = "Total")

# Add sums to the original data frame
tab <- bind_rows(tab1, summ)

# Calculate derived columns
tab <- tab %>%
  mutate(`Attack Rate` = Cases/Population*10000,
         `CFR (%)`     = Deaths/Cases*100)

结果tab

   Area Population Cases Deaths Attack Rate  CFR (%)
1     A     216767    18      0   0.8303847 0.000000
2     B     181160    17      0   0.9383970 0.000000
3     C     478978   717     16  14.9693723 2.231520
4     D     446411    13      0   0.2912115 0.000000
5     E     268476     3      0   0.1117418 0.000000
6     F     494289    45      2   0.9103986 4.444444
7     G     106303     9      0   0.8466365 0.000000
8     H     173990     8      0   0.4597965 0.000000
9 Total    2366374   830     18   3.5074760 2.168675

但是,对于派生列,我得到了除您之外的其他值...


推荐阅读