如何展平data.frame以便与googlevis treemap一起使用?

如何展平data.frame以便与googlevis treemap一起使用?,r,treemap,googlevis,R,Treemap,Googlevis,为了在googleVis上使用treemap函数,需要将数据展平为两列。以他们为例: > library(googleVis) > Regions Region Parent Val Fac 1 Global <NA> 10 2 2 America Global 2 4 3 Europe Global 99 11 4 Asia Global 10 8 5 France Europe 71 2 6

为了在googleVis上使用treemap函数,需要将数据展平为两列。以他们为例:

> library(googleVis)
> Regions
    Region  Parent Val Fac
1   Global    <NA>  10   2
2  America  Global   2   4
3   Europe  Global  99  11
4     Asia  Global  10   8
5   France  Europe  71   2
6   Sweden  Europe  89   3
7  Germany  Europe  58  10
8   Mexico America   2   9
9      USA America  38  11
10   China    Asia   5   1
11   Japan    Asia  48  11
然而,在现实世界中,这些信息通常是这样的:

> a <- data.frame(
+   scal=c("Global",    "Global",   "Global",   "Global",   "Global",   "Global",   "Global"),
+   cont=c("Europe",    "Europe",   "Europe",   "America",  "America",  "Asia", "Asia"),
+   country=c("France", "Sweden",   "Germany",  "Mexico",   "USA",  "China",    "Japan"),
+   val=c(71,   89, 58, 2,  38, 5,  48),
+   fac=c(2,3,10,9,11,1,11))
> a
    scal    cont country val fac
1 Global  Europe  France  71   2
2 Global  Europe  Sweden  89   3
3 Global  Europe Germany  58  10
4 Global America  Mexico   2   9
5 Global America     USA  38  11
6 Global    Asia   China   5   1
7 Global    Asia   Japan  48  11

但如何最有效地更改和转换这些数据

如果使用dplyr,此脚本将正确转换数据:

library(dplyr)
cbind(NA,a %>% group_by(scal) %>% summarize(val=sum(val),fac=sum(fac))) -> topLev
names(topLev) <- c("Parent","Region","val","fac")

a %>%  group_by(scal,cont) %>% summarize(val=sum(val),fac=sum(fac)) %>%
  select(Region=cont,Parent=scal,val,fac) -> midLev 

a[,2:5] %>% select(Region=country,Parent=cont,val,fac) -> bottomLev

bind_rows(topLev,midLev,bottomLev) %>% select(2,1,3,4) -> answer
我们可以通过比较数据帧来验证这一点:

> answer
Source: local data frame [11 x 4]

Region  Parent val fac
1   Global      NA 311  47
2  America  Global  40  20
3     Asia  Global  53  12
4   Europe  Global 218  15
5   France  Europe  71   2
6   Sweden  Europe  89   3
7  Germany  Europe  58  10
8   Mexico America   2   9
9      USA America  38  11
10   China    Asia   5   1
11   Japan    Asia  48  11
> Regions
    Region  Parent Val Fac
1   Global    <NA>  10   2
2  America  Global   2   4
3   Europe  Global  99  11
4     Asia  Global  10   8
5   France  Europe  71   2
6   Sweden  Europe  89   3
7  Germany  Europe  58  10
8   Mexico America   2   9
9      USA America  38  11
10   China    Asia   5   1
11   Japan    Asia  48  11
有趣的是,各大洲和全球的汇总不是其组成部分的总和,也不是最小值/最大值/平均值/标准化值