我正尝试从我的数据帧列表中提取32行数据帧的每一行。但是,它仅迭代两个for循环中的最后一个值。我不确定为什么这行不通,但也许我应该初始化一个空的数据框列表,而不是一个空列表?
a <- list()
for (z in 1:200){
for (i in 1:32){
a[z] = ListOfDataFrames[[i]][["X"]][[z,1]]
}
}
这仅产生ListOfDataFrames [[32]] [[“ X”]]的200个值的列表,这是列表中的最后一个数据帧。
这里是(str(ListOfDataFrames))
List of 32
$ :List of 2
..$ X :'data.frame': 200 obs. of 3 variables:
.. ..$ pressure : num [1:200] 635 640 760 890 900 900 910 920 1000 1000 ...
.. ..$ pressure1 : num [1:200] 735 740 820 840 890 900 910 920 1000 1000 ...
.. ..$ pressure2 : num [1:200] 645 670 760 890 900 900 910 920 1000 1000 ...
答案 0 :(得分:1)
根据显示的结构,带有tidyverse
的选项为
library(dplyr)
library(purrr)
out <- map(ListOfDataFrames, ~ pluck(.x, "X") %>%
group_split(grp = row_number(), keep = FALSE)) %>%
transpose %>%
map(bind_rows)
通过for
循环,最好初始化list
元素的预定义长度
l1 <- nrow(ListOfDataFrames[[1]]$X)
a <- vector('list', l1)
for (z in seq_len(l1)){
for (i in seq_along(ListOfDataFrames)){
a[[z]] = rbind(a[[z]], ListOfDataFrames[[i]][["X"]][z,])
}
}
-检查
all.equal(out, a, check.attributes = FALSE)
#[1] TRUE
ListOfDataFrames <- list(list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA,
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA,
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA,
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA,
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA,
-6L)), Y = 1:7))