2017-02-02 2 views
0

Образец данных:После поворота df, использующего сбор и распространение, я могу упорядочить строки на основе новой переменной Var?

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) 

Это приводит к слева направо тенденции чтения, по дате, по КПЭ, включая сеансы, преобразования и в результате коэффициент конверсии.

экрана: enter image description here

Я хотел бы заказать эти строки. В настоящее время порядок строк читается:

Con1, Con2, Conversion_Rate, Registration_Rate, Sessions (Похоже, что это в алфавитном порядке).

В частности, мне бы хотелось, чтобы таблица была в следующем порядке: Сессии, Con1, Con2, Registration_Rate, Conversion_Rate.

Я посмотрел на row.names (пример), но возвращает символ символов 1: 5 (символ да).

В идеале я мог бы сортировать строки по переменной Var, созданной во время операции gather(). Поэтому сортируйте их по имени, а не по индексу. Но не в жертву простоты.

Есть ли прямой способ для этого?

ответ

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() сортируют в соответствии с этими уровнями.

+0

Это замечательно! Большое спасибо. –