我正在尝试创建一个汇总表来汇总按4个变量分组的数据。理想情况下,将在顶部绘制2个变量,在侧面绘制2个变量。我附上了一张我用Excel中的数据创建的表格,以便了解预期的最终产品。
以下是一些提供我正在使用的测试数据的代码:
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)
我需要首先显示按区域划分的“值”的SUM,然后按“类型”显示(在表格的顶部绘制。在此之后,它应该进一步拆分为“公司”然后“持续时间” (绘制在表格的左侧)。请参见附图!即使行/列上的数据全部为0或NA,显示所有因子也非常重要。
另外,我需要复制完全相同的表,但使用COUNT(长度)函数而不是SUM。
任何想法都将不胜感激!
答案 0 :(得分:1)
使这一点变得复杂的原因是,您希望在解决方案中表示您在数据框中没有的值,例如“Company3”的所有值。我的解决方案是创建一个“锚点”数据框,其中包含Company
和Duration
的所有组合,然后左边加入一个汇总表。最后,如果值为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的输出那样合并单元格,但我认为这是一个很好的近似值。替换上面指出的您选择的摘要统计。