dplyr数据透视表

Guy*_*Guy 2 pivot r 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)
Run Code Online (Sandbox Code Playgroud)

获得值的总和

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))
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以在dplyr中做同样的事情吗?

akr*_*run 11

我们按'cyl','gear'分组,获取频率计数(tally()),从'long'重新整形为'wide'(使用spreadfrom tidyr),ungroup删除属性(以前,它曾经没有这个工作),用于mutate创建'V1'作为sum每行(使用rowSums)和最后arrange(order)行基于'V1'中的值.

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
Run Code Online (Sandbox Code Playgroud)