修复和格式化股票数据框

Fix and format dataframe of stocks

我有一个包含股票列表和股票数据的数据框。在图片中,我显示了示例股票和数据的名称。列表中的每只股票都有日期、开盘价、高点、低点和收盘价。我想要的只是关闭与单个简单合并数据框中的日期合并。我不知道该怎么做,我画了一张图片来最好地描述我想要的东西。请随意使用 mtcars 数据框作为示例。

我的名字很尴尬。我要他们改名。例如,列表中的名称是:["c/user/Tim/R/Tesla.csv"]。 我希望将它们重命名为它们的简单名称,例如 Tesla,数据帧 table 中的 Google(如下图所示)。如果您知道如何编写代码以摆脱数据帧 table 中所有名称中的 ["c/user/Tim/R/"] 和 [".csv"],那将是非常必要的。

对于第一部分,您可以使用 tools 包更轻松地提取文件名并删除路径和扩展名。

例如,如果我们在上面的示例中调用您的数据框列表 lst,您可以这样做:

library(tools)

names(lst) <- basename(file_path_sans_ext(names(lst)))
names(lst)

[1] "AVK_prices" "RR._prices" "VOD_prices"

接下来,有多种方法可以组合列表中的数据框。这是一个。

使用 tidyverse 中的 dplyr,您可以使用 bind_rows,它将附加每个数据框中的行,并添加一个名为 source 的 id 列,其中包含来自 lst 的数据框名称。在您的示例中,这将包括“AVK_prices”、“RR._prices”和“VOD_prices”。

之后,您可以 select 您需要的列(只有 sourceDateClose)。然后 pivot_wider 会将数据放入宽格式,类似于您想要的最终输出。

library(dplyr)
library(tidyr)

bind_rows(lst, .id = 'source') %>%
  select(source, Date, Close) %>%
  pivot_wider(id_cols = Date, names_from = source, values_from = Close)

输出

   Date       AVK_prices RR._prices VOD_prices
   <chr>           <dbl>      <dbl>      <dbl>
 1 13/11/2020      1477        93.7       120.
 2 12/11/2020      1468.       90         118.
 3 11/11/2020      1488        98.4       117.
 4 10/11/2020      1477       107         117.
 5 09/11/2020      1479       100         112.
 6 06/11/2020      1458        69.6       105.
 7 05/11/2020      1450        74.5       106.
 8 04/11/2020      1430        83.9       106.
 9 03/11/2020      1409        84         106.
10 02/11/2020      1377        76.6       106 
11 30/10/2020      1360        71.3       103 
12 29/10/2020      1380        72.4       104.
13 28/10/2020      1373        84.5       103.
14 27/10/2020      1412        75.2       106.
15 26/10/2020      1408        77.6       110.