Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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
使用R列中的透视表创建漏斗_R_Tidyverse - Fatal编程技术网

使用R列中的透视表创建漏斗

使用R列中的透视表创建漏斗,r,tidyverse,R,Tidyverse,我有以下数据集: library(tidyverse) dataset <- data.frame(id = c(121,122,123,124,125), segment = c("A","B","B","A",NA), Web = c(1,1,1,1,1), Tryout = c(1,1,1,0,1), P

我有以下数据集:

library(tidyverse)
dataset <- data.frame(id = c(121,122,123,124,125), 
                      segment = c("A","B","B","A",NA), 
                      Web = c(1,1,1,1,1),
                      Tryout = c(1,1,1,0,1), 
                      Purchase = c(1,0,1,0,0), 
                      stringsAsFactors = FALSE)
所以我试着一排一排地做这个。web视图代码为:

dataset %>% mutate(segment = ifelse(is.na(segment), "NA", segment)) %>% 
  group_by(segment) %>% summarise(Total = n()) %>% 
  ungroup() %>% spread(segment, Total) %>% mutate(Total = `A` + `B` + `NA`) %>% 
  select(Total,A,B,`NA`)

工作正常,只是我必须手动输入行名称。但是对于其他步骤,如试用和购买,有没有一种方法可以在一个简单的代码中完成,避免绑定?考虑到这是一个例子,我有很多栏目,所以任何帮助都会得到极大的赞赏。

< P>这里有一个选项,我们把数据转换成“长”格式,在删除“ID”栏之后,按“名称”分组得到“值”的总和,然后按“段”、“总数”分组,并做第二个和,获取不同的行,并返回“宽”格式

library(dplyr)
library(tidyr)
dataset %>% 
   select(-id) %>%
   pivot_longer(cols = -segment) %>%
   group_by(name) %>%
   mutate(Total = sum(value)) %>% 
   group_by(name, segment, Total) %>%
   mutate(n = sum(value)) %>% 
   ungroup  %>%
   select(-value) %>% 
   distinct %>%
   pivot_wider(names_from = segment, values_from = n)
# A tibble: 3 x 5
#  name     Total     A     B  `NA`
#  <chr>    <dbl> <dbl> <dbl> <dbl>
#1 Web          5     2     2     1
#2 Tryout       4     1     2     1
#3 Purchase     2     1     1     0

这里有一个选项,在删除“id”列后,我们将数据转换为“long”格式,按“name”分组,得到“value”的和,然后按“segment”、“Total”分组,再进行第二次和,得到不同的行,并转回到“wide”格式

library(dplyr)
library(tidyr)
dataset %>% 
   select(-id) %>%
   pivot_longer(cols = -segment) %>%
   group_by(name) %>%
   mutate(Total = sum(value)) %>% 
   group_by(name, segment, Total) %>%
   mutate(n = sum(value)) %>% 
   ungroup  %>%
   select(-value) %>% 
   distinct %>%
   pivot_wider(names_from = segment, values_from = n)
# A tibble: 3 x 5
#  name     Total     A     B  `NA`
#  <chr>    <dbl> <dbl> <dbl> <dbl>
#1 Web          5     2     2     1
#2 Tryout       4     1     2     1
#3 Purchase     2     1     1     0

谢谢@akrun,代码运行得很好!只是一个问题,为什么distinct不使用括号?我的意思是,它就像一个函数,我过去常常把带有它的代码看作是不同的,甚至在管道内部。@Manu你可以使用任何函数的平均值、中值等,而不需要。如果您是从名称空间(即dplyr::distinct)调用它,则可能需要。否则,它会将函数隐式应用于%>%Thank you@akrun的输出,现在我明白了如何跳过使用括号。祝你有美好的一天!谢谢@akrun,代码运行得很好!只是一个问题,为什么distinct不使用括号?我的意思是,它就像一个函数,我过去常常把带有它的代码看作是不同的,甚至在管道内部。@Manu你可以使用任何函数的平均值、中值等,而不需要。如果您是从名称空间(即dplyr::distinct)调用它,则可能需要。否则,它会将函数隐式应用于%>%Thank you@akrun的输出,现在我明白了如何跳过使用括号。祝你有美好的一天!您好@sda,谢谢。只是一个问题,在rowSums函数中,我看到一个点/句点作为rowSums。[,-1],你能告诉我该点/句点是否替换段中的所有列吗?@Manu,是的,它删除了段,但仅用于计算rowSumsHello@sda,谢谢。只是一个问题,在rowSums函数中,我看到一个点/句点作为rowSums。[,-1],你能告诉我该点/句点是否替换段中的所有列吗?@Manu,是的,它删除了段,但仅用于计算行和
dataset %>%
    select(-id) %>%
    group_by(segment) %>%
    summarise_all(sum) %>%
    gather(Step, val, -segment) %>%
    spread(segment, val) %>%
    mutate(Total = rowSums(.[,-1]))