从嵌入在数据框中的列表中提取信息的最简单方法是什么?
a<-data.frame(cyl=c(4,6,8),k=c("A","B","C"))
j<-by(data=mtcars,INDICES=mtcars$cyl,function(x) lm(mpg~disp,data=x))
a$l<-j
t(sapply(a$l,coef))->a$t
但是这会导致数据框中嵌入一个矩阵,并且需要进行一些按摩,以便将它作为两列中的相关列名称。
我想要的是一种更简单的方法来提取此信息,并将其存储在数据框a
中,并附带相关的列名。
EDIT_这就是我的想法,但我发现这个程序有些麻烦。
t(sapply(a$l,coef))->a$t
as.data.frame(a$t)->g
g$cyl<-as.numeric(rownames(g))
merge(x = a,y = g)->a2
a2[,-c(3,4)]->a3
任何更简单的方法吗?
现在,让事情变得复杂 - 如果我想通过柱面从a$l
得到残差。
sapply(a$l,function(x) x[['residuals']])->a$t
如何生成具有两列的长格式的新数据帧:cyl和residual,以后可以与原始数据帧合并?
答案 0 :(得分:0)
嗯 - 请参阅我之前编辑的第一个答案。这是我的第二个问题:
它确实解决了我的问题,但我确信必须有一种更快捷,更直观的方法来解决这个问题。
flat.list.df<-function(list,sublist){
nm<-names(list)
i<-do.call(rbind,lapply(nm,function(x){
u<-list[[x]][[sublist]]
g<-length(u)
j<-rep(x,g)
m<-data.frame(var=j,val=u)
m
})
)
return(i)
}
flat.list.df(a$l,"residuals")->w
w
merge(w,a,by.x="var",by.y="cyl")