【问题标题】:Data wrangling in efficient way (Stock data)以有效的方式处理数据(库存数据)
【发布时间】:2020-05-27 03:33:12
【问题描述】:

下面是我开始的代码:

library(quantmod)
library(timetk)
library(dplyr)
library(tibble)
library(tidyr)


mdate <- "2019-05-01"
edate <- "2019-05-03"
tickers <- c("MMM","C", "AAPL")


for(ticker in tickers)
 Open_Raw <- cbind(Open_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,1])


timetk::tk_tbl(Open_Raw)

Open_Raw <- timetk::tk_tbl(Open_Raw)[, -1]
colnames(Open_Raw) = tickers

## Open Price
Open_Raw <- NULL
for(ticker in tickers)
  Open_Raw <- cbind(Open_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,1])
Topen_Raw <- t(Open_Raw)

## High Price
High_Raw <- NULL
for(ticker in tickers)
  High_Raw <- cbind(High_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,2])
Thigh_Raw <- t(High_Raw)

## Low Price
Low_Raw <- NULL
for(ticker in tickers)
  Low_Raw <- cbind(Low_Raw, getSymbols(ticker, from = mdate, to = edate, auto.assign = F)[,2])
Tlow_Raw <- t(Low_Raw)

## write in the same way for Close, Adjusted and Volume, and;


##Cbind Open and High
Open_High <- cbind(Topen_Raw, Thigh_Raw)

##Cbind Open_High and Low_Raw
Open_to_Low <- cbind(Open_High, Tlow_Raw)

如您所见,前两列是开盘价,第三和第四列是最高价。我可以用这些代码得到我想要的输出,但是当我尝试导入数千个股票数据时会出现错误,所以我不能使用这些。如果可能的话,我想在数据集(开盘价、最高价、最低价、收盘价、调整价和成交量)之间留出一个空间

我该怎么做?

【问题讨论】:

  • 您想为开盘、高盘、低盘、收盘等设置单独的数据框吗?或者类似这样的工作Rawdata %&gt;% rownames_to_column('Date') %&gt;% pivot_longer(cols = -Date,names_to = c('ticker', '.value'), names_sep = '\\.')
  • 您好 Ronak,再次感谢您!我刚刚运行代码并收到错误:rownames_to_column(., "Date") 中的错误:找不到函数 "rownames_to_column" 我需要激活任何包或其他东西吗?我希望所有数据都显示在一个页面中,就像我上传的图片一样。
  • 是的,rownames_to_column 来自 tibblepivot_longer 来自 tidyr。如果您已经安装了tidyverse,您可以使用library(tidyverse)
  • 很抱歉 Ronak 打扰你了。我想要的格式非常像第二张图片。列名是日期,每个框由代码(行名)和股票数据组成。如您所见,前三列只有开盘价。而从第四列和第六列开始,只有高价。我深深地感谢你的帮助。这是我单独尝试了一个月的方法。
  • 嗯,R 与 excel 不同。 “完全像图片”不是分享预期输出的好方法。尝试在 R 中手动创建预期的输出,然后将其发布在此处,这将有助于了解您想要什么。

标签: r data-wrangling


【解决方案1】:

基础 R 解决方案:

# Transpose data.frame: 
td_data <- within(data.frame(price_var = row.names(t(data)), t(data), row.names = NULL), 
                  {
                    ticker_cd <- as.factor(gsub("[.].*", "", price_var))
                    price_var <- as.factor(gsub(".*[.]", "", price_var))
                  }
                )
# Reshape: 
do.call("cbind", split(td_data, td_data$price_var))

【讨论】:

  • 非常感谢您的帮助,但这不是我尝试创建的。再次感谢你好朋友
  • @DongchulPark 请查看xtabs 函数。
  • hello_friend,你介意给我解释一下这部分吗? "price_var
  • 我们删除句点后的每个字符以创建代码向量(从行名),然后从 price_var 我们从代码向量中删除值。这允许我们拆分 price_var 并保留所有必需的信息。我们转换为 factor 是因为这是两个向量的合适类型,因为它们具有一组离散的值。
  • @DongchulPark 不用担心,如果我的解决方案符合您的要求,请为我的解决方案投票!
猜你喜欢
  • 2015-02-21
  • 2021-01-24
  • 2015-02-14
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2012-07-18
  • 2012-04-04
  • 1970-01-01
相关资源
最近更新 更多