将带有列表的混合数据帧转换为纯数据帧

时间:2015-11-05 13:29:31

标签: r dataframe

从嵌入在数据框中的列表中提取信息的最简单方法是什么?

    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,以后可以与原始数据帧合并?

1 个答案:

答案 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")