0

私のデータセットは次のとおりです。

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を使いたいのですが、スプラインはリストです。別の問題は、(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 を使用できます。

4

1 に答える 1

0

I think this is what you're looking for:

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

At this point, mydata$fit is a column of data frames with x and y columns.

You can do this for the plotting:

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") 
于 2016-10-10T11:20:46.607 に答える