Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr数据透视表_R_Pivot_Dplyr_Tidyr - Fatal编程技术网

dplyr数据透视表

dplyr数据透视表,r,pivot,dplyr,tidyr,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() %>% spre

我想获得一个具有递减值的透视表

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中是否还有其他方法可以做到这一点?

我们按“cyl”、“gear”分组,获得频率计数计数,使用“tidyr”中的“spread”将“long”重塑为“wide”,取消分组以删除以前的属性,以前没有这些属性时,它也可以工作,使用mutate创建“V1”作为使用rowSums的每一行的总和,最后根据“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

谢谢akrun,您的答案是Simplefy Perfecty,我得到了错误:不兼容的大小3,在尝试此dplyr 0.4.3,tidyr 0.4.1时应为1组大小或1。我可以通过在spread和mutate参数之间插入data.frame%>%或者删除属性vars attrh来解决这个问题,该属性=vars@JWilliman您需要在spread和mutate之间添加ungroup。我认为这是2015年至2016年期间职能调整的结果。