我有一个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)