【问题标题】:Function graph with dplyr带有 dplyr 的函数图
【发布时间】:2018-04-04 07:50:54
【问题描述】:

我想用图表创建一个函数

我的数据集是这样的:

Age   NAP
17    0,282
18    0,8282
19    0,223

age是函数中的变量Var

plot_stats_freq_continu <- function(df,  Var , y = NAP)
{

  df$sinistres <- rep(1,nrow(df))
  data_graph <- df %>% 
    group_by(!! Var)%>%
    summarise(Annee_police = sum(NAP), Nb_sinistres= sum(sinistres)) %>%  
    mutate(Fréquence = mean((Nb_sinistres/Annee_police)))     

  ndata_graph <-  as.data.frame(data_graph)
  p <- ggplot(data=data_graph, aes(x=Var)) +geom_density() +geom_point(data=data_graph, aes(x=Var, y= Fréquence))
  plot(p)
}

这是我的函数,当我尝试没有函数的代码时它会走,但函数不行,

我有以下错误:

错误:美学长度必须为 1 或与数据相同 (23): x

【问题讨论】:

  • 您能否提供一些数据来轻松测试您的功能。
  • 复制到this?
  • @Jimbou 是的!对不起

标签: r function ggplot2 dplyr


【解决方案1】:

你可以试试

plot_stats_freq_continu <- function(df,  Var){
  Var <- enquo(Var)
   df %>% 
    mutate(sinistres = 1) %>% 
    group_by(!!Var) %>%
    summarise(Annee_police = sum(NAP), Nb_sinistres= sum(sinistres)) %>%  
    mutate(Fréquence = mean((Nb_sinistres/Annee_police))) %>% 
  ggplot(aes_q(Var)) + 
    geom_density()+
    geom_point(aes_q(Var, quote(Fréquence)))
}

plot_stats_freq_continu(d, Age)

问题是 Var 未被 ggplot 识别。使用substitute 解决了这个问题。

【讨论】:

  • @Naï 编辑了我的答案以使用管道直到最后。如果您对此感到满意,请考虑接受答案。
【解决方案2】:

这是您的数据的问题。我在您提供的数据上运行了您的代码(但我从数字中删除了,)并且您的代码运行良好。除非您提供示例数据和可重复的示例,否则我们无法帮助您。

我猜它与这个块有关:

  data_graph <- df %>% 
    group_by(!! Var)%>%
    summarise(Annee_police = sum(NAP), Nb_sinistres= sum(sinistres)) %>%  
    mutate(Fréquence = mean((Nb_sinistres/Annee_police)))

上述代码中的计算可能会产生比您的数据短的Fréquence(错误状态为23)。我猜这段代码会默默地出错并产生一个空的data.frame。还有这一行:

ndata_graph &lt;- as.data.frame(data_graph)

是多余的/未使用的。

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2015-10-12
    • 2020-03-09
    • 2018-04-21
    • 2015-08-23
    • 2021-06-01
    相关资源
    最近更新 更多