在 R 中创建具有多个变量的汇总表

Creating Summary Tables with multiple variables in R

我正在尝试创建摘要 table 来汇总按 4 个变量分组的数据。理想情况下,将在顶部绘制 2 个变量,在侧面绘制 2 个变量。我附上了我用 Excel 中的数据创建的 table 以了解预期的最终产品。

这里有一些代码可以提供我正在使用的测试数据:

Zone <- c("Europe", "Europe", "Europe", "Europe", "USA", "USA", "Asia", 
"Asia", "Europe", "USA", "Europe", "Europe")
Type <- c(1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2)
Company <- c("Company1", "Company1", "Company4", "Company4", "Company2", 
"Company2", "Company2", "Company5", "Company5", "Company5", "Company1", 
"Company5")
Duration <- c(3, 3, 3, 1, 3, 2, 5, 5, 5, 4, 4, 4)
Value <- c(1000, 1000, 2000, 2000, 1500, 1300, 6000, 2000, 1000, 1200, 3000, 
3000)

df <- data.frame(Zone, Type, Company, Duration, Value)

我需要显示 "value" 的总和,首先按区域划分,然后按 "Type"(绘制在 table 的顶部)。在此之后应该进一步按 "Company" 拆分,然后 "Duration"(绘制在 table 的左侧)。请参阅附图!显示所有因素非常重要,即使数据在row/column 全部为 0 或 NA。

此外,我需要复制完全相同的 table 但使用 COUNT(length) 函数而不是 SUM。

如有任何想法,我们将不胜感激!

使这变得有点复杂的是,您想要在解决方案中表示的值在数据框中没有,例如 "Company3." 的所有值我的解决方案是创建一个 "anchor" 数据框包含 CompanyDuration 的所有组合,然后向左加入摘要 table。最后,将值为 NA 的位置设置为 0.

library(dplyr)

# Create anchor dataframe
anchor <- data.frame(Company = rep(c("Company1","Company2","Company3","Company4","Company5"),each=5),
                 Duration = rep(c(1:5),5),
                 stringsAsFactors = F)
# Summarize data
summary <- df %>%
             group_by(Zone,Type,Company,Duration) %>%
             summarise(stat = sum(Value)) %>% # summarise as desired
             ungroup() %>%
             mutate(Zone.Type =  paste0(Zone,".",Type)) %>%
             select(-Zone,-Type) %>%
             spread(key = Zone.Type, value = stat, fill = 0)

# Join the anchor to the summary
final <- left_join(anchor,summary,by = c("Company","Duration")) %>%
           arrange(Company,Duration)

# Set all NA to 0
final[is.na(final)] <- 0

这将给出以下结果:

    Company Duration Asia.1 Asia.2 Europe.1 Europe.2 USA.1 USA.2
1  Company1        1      0      0        0        0     0     0
2  Company1        2      0      0        0        0     0     0
3  Company1        3      0      0     2000        0     0     0
4  Company1        4      0      0        0     3000     0     0
5  Company1        5      0      0        0        0     0     0
6  Company2        1      0      0        0        0     0     0
7  Company2        2      0      0        0        0     0  1300
8  Company2        3      0      0        0        0  1500     0
9  Company2        4      0      0        0        0     0     0
10 Company2        5   6000      0        0        0     0     0
11 Company3        1      0      0        0        0     0     0
12 Company3        2      0      0        0        0     0     0
13 Company3        3      0      0        0        0     0     0
14 Company3        4      0      0        0        0     0     0
15 Company3        5      0      0        0        0     0     0
16 Company4        1      0      0     2000        0     0     0
17 Company4        2      0      0        0        0     0     0
18 Company4        3      0      0        0     2000     0     0
19 Company4        4      0      0        0        0     0     0
20 Company4        5      0      0        0        0     0     0
21 Company5        1      0      0        0        0     0     0
22 Company5        2      0      0        0        0     0     0
23 Company5        3      0      0        0        0     0     0
24 Company5        4      0      0        0     3000  1200     0
25 Company5        5      0   2000     1000        0     0     0

数据框不能像您提供的类似 excel 的输出那样具有合并单元格,但我认为这是一个很好的近似值。在上面指示的地方替换您选择的汇总统计量。