R中列表上的扩充和ggplot问题
problems with augment and ggplot on list in R
我的数据集是:
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")
但给我一个错误:"Error: ggplot2 doesn't know how to deal with data of class list",因为 ggplot 需要数据框而不是列表。有没有一种方法可以适合数据框或在列表上使用扩充?
如果我可以使用 augment,我可以这样做:
mydata1 <- mydata%>%
nest(-(x1:x5))%>%
mutate(fit = map(data, ~spline(.$x6,.$x7)),
result = map(fit, augment))%>%
unnest(result)
所以我已经安装在数据框中,我可以使用 ggplot。
我想这就是您要找的:
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
是一列数据框,有x
和y
列。
你可以为绘图做这个:
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")
我的数据集是:
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")
但给我一个错误:"Error: ggplot2 doesn't know how to deal with data of class list",因为 ggplot 需要数据框而不是列表。有没有一种方法可以适合数据框或在列表上使用扩充? 如果我可以使用 augment,我可以这样做:
mydata1 <- mydata%>%
nest(-(x1:x5))%>%
mutate(fit = map(data, ~spline(.$x6,.$x7)),
result = map(fit, augment))%>%
unnest(result)
所以我已经安装在数据框中,我可以使用 ggplot。
我想这就是您要找的:
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
是一列数据框,有x
和y
列。
你可以为绘图做这个:
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")