使用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]))