示例数据:
sample_data <- data.frame(
Device = c("Desktop", "Desktop", "Desktop", "Tablet", "Tablet", "Tablet", "Mobile", "Mobile", "Mobile"),
Date_Range = seq(as.Date("2017-01-01"), as.Date("2017-01-30"), by = 1),
Sessions = ceiling(rnorm(90, mean = 3000, sd = 300)),
Conversion1 = ceiling(rnorm(90, mean = 800, sd = 100)),
Conversion2 = ceiling(rnorm(90, mean = 400, sd = 50))
)
与dplyr进行一些争论
library(dplyr)
example <- tbl_df(sample_data) %>%
group_by(Date_Range) %>%
summarize(Sessions = sum(Sessions),
Con1 = sum(Conversion1),
Con2 = sum(Conversion2)) %>%
mutate(Registration_Rate = round(Con1/Sessions,2),
Conversion_Rate = round(Con2/Sessions,2)) %>%
gather(Var, Val, - Date_Range) %>%
group_by(Date_Range) %>%
spread(Date_Range, Val)
这导致按日期从左到右读取KPI,包括会话,转化次数和产生的转化率。
我想订购这些行。目前行的顺序为:
Con1,Con2,Conversion_Rate,Registration_Rate,Sessions(看起来像是按字母顺序排列)。
具体来说,我希望按以下顺序排列表格: 会话,Con1,Con2,Registration_Rate,Conversion_Rate。
我查看了row.names(示例),但返回的字符向量为1:5(是的字符)。
理想情况下,我可以通过在gather()操作期间创建的Var变量对行进行排序。所以按名称而不是索引对它们进行排序。但不是为了简单的牺牲。
有没有直接的方式来做到这一点?
答案 0 :(得分:1)
一种方法可能是:
example <- tbl_df(sample_data) %>%
group_by(Date_Range) %>%
summarize(Sessions = sum(Sessions),
Con1 = sum(Conversion1),
Con2 = sum(Conversion2)) %>%
mutate(Registration_Rate = round(Con1/Sessions,2),
Conversion_Rate = round(Con2/Sessions,2)) %>%
gather(Var, Val, - Date_Range) %>%
group_by(Date_Range) %>%
spread(Date_Range, Val)%>%
mutate(Var = factor(Var, levels = c("Sessions", "Con1", "Con2", "Registration_Rate", "Conversion_Rate"))) %>%
arrange(Var)
Var
是一个字符向量,因此将其转换为一个因子并将levels
设置为所需的顺序意味着arrange()
将根据这些级别进行排序。