如何将数据框添加到列表中?

3
我有一个for循环,它读取一系列csv文件,对其进行清洗并将输出导出为新的csv文件。在输出csv文件之前,我想要将清洗后的数据框添加到某种列表中,以便在整个过程结束时(在for循环内需要清理大约36个csv文件)将所有已清理的数据框合并成一个单独的大型数据框,以便导出为csv。
以下是我在代码开头(在循环之前)初始化的空列表示例:
```python cleaned_data_frames = [] ```
csv_list <- vector(mode = "list", length = 36)

当我运行循环时,数据框未按预期附加。与添加到现有列(数据具有相同的行和列名称,只是值不同)不同,列表仅用列名填充代替行,反之亦然。
我是否错误地使用了列表?另一个想法是创建一个空数据框,并在每次循环运行时将清理后的数据框合并到空数据框中。
我对基本R、dplyr等没有偏好。任何帮助都将不胜感激。

1
L <- list(); L <- c(L, mtcars); L <- c(L, mtcars); L - r2evans
你是想要存储数据框还是每个数据框的内存地址? - questionmark
1
类似的/不同的:L <- list(); L[[1]] <- mtcars; L[[2]] <- mtcars; L. - r2evans
1
@r2evans 谢谢你的帮助!我想我已经成功让它正常工作了。非常感谢! - Gordon L.
1个回答

3
恭喜您选择了一种往对象中迭代添加帧的好方法 :-)
根据您的工作方式,有两种不同的方法:
csv_list <- vector(mode = "list", length = 3)
csv_list[[1]] <- mtcars[1:2,]
csv_list[[2]] <- mtcars[1:2,]
csv_list
# [[1]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# [[2]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# [[3]]
# NULL

或者

csv_list <- list()
csv_list <- c(csv_list, list(mtcars[1:2,]))
csv_list <- c(csv_list, list(mtcars[1:2,]))
csv_list
# [[1]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
# [[2]]
#               mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
# Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4

请注意,最后一个列表是开放式的,其长度不一定是您最终需要的长度。即使您在代码中预分配了长度36,如果尝试分配[[37]](第一个示例)或附加第37个帧(第二个示例),它也可以正常工作,在此用例中没有边界检查。
(顺便说一句:与data.frame和其他一些对象不同,任意附加到列表对象并不会导致性能下降。例如,如果您tracemem一个框架并附加一行,则会看到内存移位,表示所有框架数据的副本(无论您添加了多少行)。相反,如果您tracemem(csv_list),则可以使用上述任何一种方法有效地附加它,并且列表的内存地址永远不会更改,这表明存储调整效率更高一些。这并不是说它是无懈可击的,但通常相当不错。)

1
@akrun,这个问题的前提是预分配列表,所以您的评论似乎不适用。(而且它有两个错别字。) - r2evans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接