【问题标题】:How to join each individual file in list with another data frame in R如何将列表中的每个单独文件与 R 中的另一个数据框连接起来
【发布时间】: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

我需要按顺序执行的步骤如下:

  1. 转置除ticker_symbol 列以外的500 个列表(日期为行,“日期”列下的损益表元素为列)
  2. 将列表中的每个文件与其他数据框连接以添加“关闭”列
  3. 将列表合并为一个数据框

我已经为此工作了一段时间,遇到了一些问题:

  1. 如果不先将列表中的元素合并到一个数据框中,我不知道如何转置它们。
  2. 如果不先合并列表中的元素,我不知道如何将它们与另一个数据框连接起来。
  3. 当我合并所有列表时,我会为每个代码获得一个单独的“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 &lt;- do.call(cbind, file_list)

标签: r list dataframe join merge


【解决方案1】:

关于加入表格的问题,我认为merge() 可以满足您的需求。它要么合并两个表x 和y,要么合并公共列名,要么合并使用参数by、by.x 或by.y 明确指定的列。查看?merge 以获得完整描述。您还可以指定附加到不用于合并的常用列名的后缀。

您的带有Net Income 数据的表似乎是一个不同的问题,因为它似乎是宽格式和长格式的混合体,同时混合了列名和数据字段。我认为在 R 中修复这样的数据结构会有点难看。如果可能的话,在 R 之外使用 awk 之类的东西可能会更容易解决这个问题。

如果您需要在R 中执行此操作,我会尝试将数据作为列表读取并尝试将其重组为适合 data.frame 的数据结构,因为这是大多数人所期望的接口数据分析功能。

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2018-12-14
    • 2021-01-11
    • 2020-09-10
    相关资源
    最近更新 更多