【问题标题】:problems with augment and ggplot on list in RR中列表上的augment和ggplot问题
【发布时间】:2016-10-10 08:35:00
【问题描述】:

我的数据集是:

mydata <- data.frame(
  x1= as.factor(1:3), 
  x2= as.factor (4:6), 
  x3= as.factor(7:9), 
  x4= as.factor (2:7), 
  x5= as.factor(1:6), 
  x6= as.numeric(1:18),
  x7= as.numeric(18:35)
  )

我想在 x6 和 x7 上做样条,但在我对 x1、x2、x3、x4、x5 进行分组之前,我做了:

mydata1 <- mydata%>%
    nest(-(x1:x5))%>%
    mutate(fit = map(data, ~spline(.$x6,.$x7)))

现在我想使用 broom::augment,但 spline 是一个列表。另一个问题是我想做一个情节(用ggplot2):

ggplot(data= mydata%>%, aes(x = x6, y = x7))+
    geom_line(aes(color = x1, linetype = x2))+
    geom_line(data= mydata1$fit, aes(x= .$x, y= .$y,color = x1,linetype = x2))+
    facet_grid(x3~x4, scales = "free")

但是给我一个错误:“错误:ggplot2 不知道如何处理类列表的数据”,因为 ggplot 想要一个数据框而不是列表。有没有适合作为数据框或在列表中使用扩充的方法? 如果我可以使用增强,我可以这样做:

mydata1 <- mydata%>%
    nest(-(x1:x5))%>%
    mutate(fit = map(data, ~spline(.$x6,.$x7)),
           result = map(fit, augment))%>%
    unnest(result)

所以我已经 .fitted 了一个数据框,我可以使用 ggplot。

【问题讨论】:

    标签: r list ggplot2 spline broom


    【解决方案1】:

    我想这就是你要找的东西:

    library(ggplot2)
    library(tidyverse)
    
    data_frame(
      x1=as.factor(1:3), 
      x2=as.factor (4:6), 
      x3=as.factor(7:9), 
      x4=as.factor (2:7), 
      x5=as.factor(1:6), 
      x6=as.numeric(1:18),
      x7=as.numeric(18:35)
    ) -> mydata
    
    mydata %>%
      nest(-(x1:x5))%>%
      mutate(fit=map(data, ~as_data_frame(spline(.$x6, .$x7)))) -> mydata1
    

    此时,mydata$fit 是一列具有xy 列的数据框。

    您可以为绘图执行此操作:

    ggplot() +
      geom_line(data=mydata, 
                aes(x=x6, y=x7, color=x1, linetype=x2))+
      geom_line(data=select(mydata1, -data) %>% unnest(fit), 
                aes(x=x, y=y, color=x1, linetype=x2)) +
      facet_grid(x3~x4, scales="free") 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2023-03-06
      • 2016-07-03
      • 2020-04-03
      相关资源
      最近更新 更多