2017-08-22 74 views
5

Bu, how to combine ggplot and dplyr into a function? numaralı telefondan bir takiptir.ggplot ve dplyr kullanarak fonksiyonlardaki pozlamalardan faktör değişkenleri nasıl oluşturulur?

Sorun, dplyr, ggplot ve muhtemelen quosures arasındaki faktör değişkenlerini belirleyen bir işlevi nasıl yazılır? Burada

gruplama değişken için sürekli bir skala ile

get_charts1 <- function(data, mygroup, myoutput){ 

    quo_var <- enquo(mygroup) 
    quo_output <- enquo(myoutput) 

    df_agg <- data %>% 
    group_by(!!quo_var) %>% 
    summarize(mean = mean(!!quo_output, na.rm = TRUE), 
       count = n()) %>% 
    ungroup() 

    ggplot(df_agg, aes_q(x = quote(count), y = quote(mean), color = quo_var, group = quo_var)) + 
    geom_point() + 
    geom_line() 
} 

get_charts1(dataframe, 
      mygroup = group, 
      myoutput = value) 

çıktısı bir grafik, yani, bir örnek

dataframe <- data_frame(id = c(1,2,3,4,5,6), 
         group = c(1,1,0,0,3,4), 
         value = c(200,400,120,300,100,100)) 

# A tibble: 6 x 3 
    id group value 
    <dbl> <dbl> <dbl> 
1  1  1 200 
2  2  1 400 
3  3  0 120 
4  4  0 300 
5  5  3 100 
6  6  4 100 

Görüldüğü gibi, gruplama değişken group burada sayısal olan arzu edilmez.

enter image description here

İdeal olarak, ben on-the-fly faktör değişkenleri tanımlamak istiyorum.

ggplot(df_agg, aes_q(x = quote(count), 
         y = quote(mean), 
         color = factor(quo_var), 
         group = factor(quo_var))) + 
    geom_point() + 
    geom_line() 

elbette çalışmaz: Bu işlevde böyle bir şey olması vardır.

Soru şudur: Burada ne yapılabilir?

Teşekkürler!

cevap

5

Diğer rlang işlevlerini kullanma olasılığı vardır.

get_charts1 <- function(data, mygroup){ 

    quo_var <- enquo(mygroup) 

    df_agg <- data %>% 
    group_by(!!quo_var) %>% 
    summarize(mean = mean(value, na.rm = TRUE), 
       count = n()) %>% 
    ungroup() 

    cc <- rlang::expr(factor(!!(rlang::get_expr(quo_var)))) 
    # or just cc <- expr(factor(!!get_expr(quo_var))) if you include library(rlang) 

    ggplot(df_agg, aes_q(x = quote(count), y = quote(mean), color = cc)) + 
    geom_point() + 
    geom_line() 
} 

Biz expr() işlevini kullanarak ifadeyi factor(group) kurmak. quo_var işaretinden "grup" sembol ismini çıkarmak için get_expr() kullanıyoruz. İfadeyi oluşturduktan sonra, aes_q'a iletebiliriz. Umarım ggplot yakında düzenli değerlendirme yapacaktır ve bu artık gerekli olmayacaktır.

+0

çok tatlı! Teşekkürler! bir şekilde neyin güzel olduğu, bu işlevin 'value' var üzerinde basit işlemlerle çağrılmasının aslında işe yaramasıdır:' get_charts1 (dataframe, mygroup = group, myoutput = log (value)) ' –