dplyr数据透视表

时间:2015-04-18 17:24:05

标签: r pivot dplyr tidyr

我想获得一个具有降序值的数据透视表。

library(dplyr)
library(tidyr)

h<-mtcars %>%
  group_by(cyl, gear) %>%
  tally() %>%
  spread(gear, n, fill = 0)
h<-h%>% add_rownames("index")

i<-mtcars %>%
  group_by(cyl, gear) %>%
  tally() %>%
  spread(cyl, n, fill = 0)

获取值的总和

j<-i%>%
  select(-1)%>%
  summarise_each(funs(sum))

k<-t(j)
k<- as.data.frame(k)
k<-tbl_df(k)
k<-k%>%add_rownames("index")

l<-left_join(h,k,by="index")
l<-l%>%
  select(-1)%>%
  arrange(desc(V1))

在dplyr中还有另一种方法吗?

1 个答案:

答案 0 :(得分:11)

我们按照&#39; cyl&#39;&#39; gear&#39;来获取频率计数(tally()),重新设定&#39; long&#39;广泛的&#39; (使用spread中的tidyr),ungroup删除属性(以前,过去没有使用此属性),使用mutate创建&#39; V1&#39 ;作为每行的sum(使用rowSums),最后是arrangeorder)行,基于&#39; V1&#39;中的值。

library(dplyr)
library(tidyr)

mtcars %>%
   group_by(cyl, gear) %>% 
   tally() %>%
   spread(gear, n, fill=0) %>% 
   ungroup() %>%
   mutate(V1= rowSums(.[-1])) %>% 
   arrange(desc(V1))
#    cyl     3     4     5    V1
#  <dbl> <dbl> <dbl> <dbl> <dbl>
#1     8    12     0     2    14
#2     4     1     8     2    11
#3     6     2     4     1     7