修复和格式化股票数据框
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
您需要的列(只有 source
、Date
和 Close
)。然后 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.
我有一个包含股票列表和股票数据的数据框。在图片中,我显示了示例股票和数据的名称。列表中的每只股票都有日期、开盘价、高点、低点和收盘价。我想要的只是关闭与单个简单合并数据框中的日期合并。我不知道该怎么做,我画了一张图片来最好地描述我想要的东西。请随意使用 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
您需要的列(只有 source
、Date
和 Close
)。然后 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.