【发布时间】:2021-07-26 11:56:53
【问题描述】:
我从 CSV 创建了一个包含 500 个文件的列表,并使用以下代码附加了一个带有文件名的列:
filenames <- list.files(pattern="*.csv")
file_list <- lapply(filenames, function(x) cbind(Ticker_Symbol=strsplit(x,'\\.')[[1]][1], read.csv(x)))
每个文件的结构相似,但所有文件的行号和列名并不相同。
我有另一个带有“Ticker_Symbol”列的数据框,我想将每个文件与另一个数据框连接起来。然后我想将所有文件合并到一个数据框中。
每个文件的片段(“日期”列不恰当地指代损益表的元素):
Ticker_Symbol Date 2020-12 2020-09 2020-06
ZTS Net Income 1.20B 1.1B 1.097B
要加入的数据框片段:
Ticker_Symbol Date Close
ZTS 2020-12 11.8
我需要按顺序执行的步骤如下:
- 转置除ticker_symbol 列以外的500 个列表(日期为行,“日期”列下的损益表元素为列)
- 将列表中的每个文件与其他数据框连接以添加“关闭”列
- 将列表合并为一个数据框
我已经为此工作了一段时间,遇到了一些问题:
- 如果不先将列表中的元素合并到一个数据框中,我不知道如何转置它们。
- 如果不先合并列表中的元素,我不知道如何将它们与另一个数据框连接起来。
- 当我合并所有列表时,我会为每个代码获得一个单独的“Ticker_Symbol”列(“AAPL”为“Ticker_Symbol.x”,“ABBV”为“Ticker_Symbol.y”等)我需要所有合并后的 Ticker_Symbols 在单列中。这是我要合并的代码:
merged_table <- Reduce(function(x, y) full_join(x, y, by="Date"), file_list)
理想的输出应该是这样的:
Ticker_Symbol Date Net_Income Close
ZTS 2020-12 1.20B 11.8
ZTS 2020-09 1.1B 11.6
ZTS 2020-06 1.097B 11.5
AME 2020-12 600M 10.8
AME 2020-09 689.4M 10.9
AME 2020-06 702.8M 11.2
很抱歉这个冗长的问题 - R 新手,我已经尝试解决这个问题近一个星期了,但没有成功。任何帮助将不胜感激!
【问题讨论】:
-
也许您不需要加入但
cbind。试试看:merged_table <- do.call(cbind, file_list)
标签: r list dataframe join merge