将列表解析为具有与数据框单元格位置

时间:2017-08-29 14:23:18

标签: r

我有一个xlsx包的列表输出,其中包含一些电子表格值。列表元素名称是格式" row.column"中的单元格位置。我需要将其转换回数据框。我有一个非常慢的解决方案。我很感激有关如何改进代码的任何想法。

library(stringr)

#create toy list example. list element name corresonds to data frame cell location.
cols<-40
rows <- 20
cells <- paste(rep(1:rows,each=cols),rep(seq(1:cols),rows),sep=".")
cells <- sample(cells,length(cells),replace = F)
set.seed(42)
toy.l <- sapply(cells,function(x) rnorm(1,2,1))
names(toy.l) <- cells

# convert list to data frame
parse_list <- function(l) {
  col.count <- max(unlist(lapply(1:length(l),function(x) {as.numeric(str_extract(names(l[x]),"(?<=\\.)\\d+"))})))
  df <- as.data.frame(matrix(rep(NA_character_ , 20*col.count),ncol=col.count),stringsAsFactors = F)
  for (i in 1:length(l)) {
    df[as.numeric(str_extract(names(l[i]),"\\d+(?=\\.)")),as.numeric(str_extract(names(l[i]),"(?<=\\.)\\d+"))] <- l[[i]]
  }
  return(df)
}
df.soln <- parse_list(toy.l)

0 个答案:

没有答案