将数据移动到另一个数据框时,无法填充数据框和重命名列

mks212

我正在运行一个脚本,该脚本从Yahoo Finance下载股票价格,然后计算其价格变化的日志,即前20天的标准差,将ith价格乘以ith标准差,然后将当前价格变化除以价格前一天或i-1的更改。

我在每个地方都有for循环,这是第一个危险信号,因为在R中有更好的方法来做事情。我很乐意在任何可能的地方使用向量化操作。

我在R中定义了一个空数据框来包含我想要的信息。我读到这是一个坏主意。我确实知道数据帧的大小,因为我知道我要为其下载价格的符号数量。但是,当我初始化数据帧时,它只是填充用0指定的行数,并在下面添加我想要的数据。通过在事实之后删除行来简单地解决此问题很容易,但是我敢肯定有一种更干净的方法。

下面的代码创建一个错误:

 1: In `[<-.factor`(`*tmp*`, ri, value = "IBM") :
invalid factor level, NA generated.  

如果在初始化SpikeData时将0s更改为1s,它将很好地填充,但是我需要删除空白的第一行,该行在脚本的第三行到最后一行完成。

我遇到的第二个问题是SpikeRank数据框中的列名。我希望第一列的标题为“符号”,接下来的5列为日期。但是,我似乎无法混合搭配。如果我将第一个col名称设置为“ Symbol”,则日期将转换为序列号。在使用此脚本的过程中,我将添加其他也包含字符的列,因此我希望能够混合并匹配列名称中的日期和字符。

GetVol <- function(Window = 20, end=as.Date(Sys.time()), start = end-37){

library(tseries)
library(zoo)

SpikeRank = data.frame(stringsAsFactors=FALSE, Symbol=character(0),
SDInPriceTerms1=numeric(0), SDInPriceTerms2=numeric(0),
SDInPriceTerms3=numeric(0), SDInPriceTerms4=numeric(0), 
SDInPriceTerms5=numeric(0))

SymbolList <- c("AAPL", "IBM")

for (Symbol in SymbolList)
 {
ts <- get.hist.quote(instrument=Symbol, 
                   start, end, 
                   quote="Close", provider="yahoo", origin="1970-01-01",
                   compression="d", retclass="zoo")

df <- data.frame(ts)
df <- data.frame(Date=as.Date(rownames(df)), Close=df$Close)


df$PriorClose <- c(NA, head(df$Close, -1))
df$Return <- log(df$Close/df$PriorClose)

for (i in 1:length(df$Close))
{
  if(i < Window+1)  
  {
    df$stddev[i] = NA
    df$SDPrice[i] = NA
    df$CurrentSpike[i] = NA
  }

  else
  { 
    df$stddev[i] <- sd(df$Return[(i-Window+1):i], na.rm = TRUE)
    df$SDPrice[i] <- df$stddev[i] * df$Close[i]
    df$CurrentSpike[i] <- (df$Close[i] - df$PriorClose[i])/df$SDPrice[i-1]
  }

}#end for

df <- na.omit(df)
SpikeRank <-  rbind(SpikeRank, c(Symbol, df$CurrentSpike))

}#end for loop

SpikeRank <- SpikeRank[-1,]
colnames(SpikeRank) <- c(as.Date(1), df$Date)
print(SpikeRank)

下面假设SpikeRank的打印(假设数据帧用1s而不是0s初始化)。行中的值都是正确的。我的计算没有任何问题。

1970-01-02         2014-03-03        2014-03-04        2014-03-05         2014-03-06
2       AAPL  0.268505943103897 0.613087867831883 0.195414096323545 -0.289567687725125
3        IBM -0.600147413085885  1.43686920161242 0.592564096496001  0.426680866502713
      2014-03-07
2 -0.055981998552076
3 0.0344269384370513

如果有帮助,以下是IBM的df:

     Date  Close PriorClose        Return      stddev  SDPrice CurrentSpike
1  2014-01-30 177.36         NA            NA          NA       NA           NA
2  2014-01-31 176.68     177.36 -0.0038413786          NA       NA           NA
3  2014-02-03 172.90     176.68 -0.0216267940          NA       NA           NA
4  2014-02-04 172.84     172.90 -0.0003470816          NA       NA           NA
5  2014-02-05 174.24     172.84  0.0080673481          NA       NA           NA
6  2014-02-06 174.67     174.24  0.0024648203          NA       NA           NA
7  2014-02-07 177.25     174.67  0.0146626860          NA       NA           NA
8  2014-02-10 177.14     177.25 -0.0006207850          NA       NA           NA
9  2014-02-11 179.70     177.14  0.0143484134          NA       NA           NA
10 2014-02-12 180.24     179.70  0.0030005023          NA       NA           NA
11 2014-02-13 181.84     180.24  0.0088378834          NA       NA           NA
12 2014-02-14 183.69     181.84  0.0101223746          NA       NA           NA
13 2014-02-18 183.19     183.69 -0.0027256886          NA       NA           NA
14 2014-02-19 182.95     183.19 -0.0013109741          NA       NA           NA
15 2014-02-20 184.26     182.95  0.0071349122          NA       NA           NA
16 2014-02-21 182.79     184.26 -0.0080098508          NA       NA           NA
17 2014-02-24 183.45     182.79  0.0036041979          NA       NA           NA
18 2014-02-25 183.23     183.45 -0.0011999565          NA       NA           NA
19 2014-02-26 184.06     183.23  0.0045195971          NA       NA           NA
20 2014-02-27 185.27     184.06  0.0065524292          NA       NA           NA
21 2014-02-28 185.17     185.27 -0.0005398985 0.008188660 1.516294           NA
22 2014-03-03 184.26     185.17 -0.0049265184 0.008233949 1.517188  -0.60014741
23 2014-03-04 186.44     184.26  0.0117616678 0.006336123 1.181307   1.43686920
24 2014-03-05 187.14     186.44  0.0037475283 0.006261815 1.171836   0.59256410
25 2014-03-06 187.64     187.14  0.0026682336 0.006192074 1.161881   0.42668087
26 2014-03-07 187.68     187.64  0.0002131514 0.006236115 1.170394   0.03442694

谢谢您的帮助。

耶洛华德

首先,您的代码无法按所示方式运行。这是因为你不刻意去界定startendWindow因此,我不得不从您df的IBM中推断出这些价值(顺便说一句:这可能就是为什么没有人愿意回答的原因。对SO的期望是,如果您需要帮助,将提供一个可行的示例)。

所以这是生产您所拥有的东西的一种较短的方法。请注意,使用rollapply(...)head(...)来避免内部循环,以及使用do.call(rbind,lapply(...))来避免外部循环和的预分配SpikeRank您坚持使用日期作为列名会造成很多问题,因为大多数创建数据框的函数的默认行为是避免以数字开头的列名。

library(tseries)   # for get.hist.quote
library(zoo)       # for rollapply

start      <- "2014-01-30"
end        <- "2014-03-07"
Window     <- 20
SymbolList <- c("AAPL","IBM")

get.SpikeRank <- function(Symbol,start, end, Window) {
  ts <- get.hist.quote(instrument=Symbol, 
                       start, end, 
                       quote="Close", provider="yahoo", origin="1970-01-01",
                       compression="d", retclass="zoo")
  df <- data.frame(ts)
  df <- data.frame(Date=as.Date(rownames(df)), Close=df$Close)
  df$PriorClose   <- c(NA, head(df$Close, -1))
  df$Return       <- log(df$Close/df$PriorClose)
  df$stdev        <- c(rep(NA,Window),rollapply(df$Return[-1],width=Window,sd,na.rm=T))
  df$SDPrice      <- df$stdev * df$Close
  df$CurrentSpike <- (df$Close - df$PriorClose)/c(NA,head(df$SDPrice,-1))
  df              <- na.omit(df)
  row             <- df$CurrentSpike
  names(row)      <- df$Date
  return(row)
}
SpikeRank <- do.call(rbind,lapply(SymbolList,get.SpikeRank,start,end,Window))
SpikeRank <- data.frame(Symbol=SymbolList, SpikeRank)
colnames(SpikeRank)[-1] <- substring(colnames(SpikeRank)[-1],2)
print(SpikeRank)
#   Symbol 2014.03.03 2014.03.04 2014.03.05 2014.03.06  2014.03.07
# 1   AAPL  0.2685059  0.6130879  0.1954141 -0.2895677 -0.05598200
# 2    IBM -0.6001474  1.4368692  0.5925641  0.4266809  0.03442694

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用来自另一个数据框的名称重命名列

来自分类Dev

使用来自另一个数据框的名称重命名列

来自分类Dev

用另一个数据框的值填充数据框列

来自分类Dev

如何用另一个数据框重命名pandas数据框列?

来自分类Dev

使用 scala 重命名与另一个数据框相关的数据框的列名

来自分类Dev

熊猫从另一个数据框中填充数据框中的缺失值

来自分类Dev

Python根据另一个数据框值中存在的列索引填充数据框值

来自分类Dev

根据另一个数据框重命名多列中的记录

来自分类Dev

用另一个数据框熊猫中的每两列重命名

来自分类Dev

使用与另一个数据框的匹配来重命名数据框列表中的列

来自分类Dev

使用条件将数据从一个数据框填充到另一个数据框,然后重复填充直到条件更改

来自分类Dev

用另一个数据框的列填充熊猫中的数据框列

来自分类Dev

根据另一个数据框的列填充熊猫数据框列

来自分类Dev

Python-启动空数据框并从另一个数据框填充

来自分类Dev

如何搜索熊猫数据框以填充另一个数据框?

来自分类Dev

使用另一个数据框的唯一值创建并填充一个数据框

来自分类Dev

根据匹配其他列与另一个数据框的值来填充数据框的缺失值,同时保持不匹配的值

来自分类Dev

根据将其他列与另一个数据框匹配的值来填充数据框的缺失值

来自分类Dev

根据另一个数据框的值填充一个数据框的值

来自分类Dev

创建新的数据框,该数据框填充了另一个数据框的简单计算

来自分类Dev

当另一个的值满足条件时,使用向量中的值填充数据框

来自分类Dev

用另一个中的相应值填充数据框

来自分类Dev

从另一个Multiindexed数据框的索引填充数据框列的矢量化方法?

来自分类Dev

根据来自另一个数据框的值将数据框拆分为多个数据框

来自分类Dev

在mysql和php中将数据从一个数据库移动到另一个数据库时出错

来自分类Dev

将数据框列添加到另一个数据框

来自分类Dev

将数据框列添加到另一个数据框

来自分类Dev

将数据框附加到另一个数据框的列和Python常量

来自分类Dev

将特定的列与另一个数据框合并后无法选择它

Related 相关文章

  1. 1

    使用来自另一个数据框的名称重命名列

  2. 2

    使用来自另一个数据框的名称重命名列

  3. 3

    用另一个数据框的值填充数据框列

  4. 4

    如何用另一个数据框重命名pandas数据框列?

  5. 5

    使用 scala 重命名与另一个数据框相关的数据框的列名

  6. 6

    熊猫从另一个数据框中填充数据框中的缺失值

  7. 7

    Python根据另一个数据框值中存在的列索引填充数据框值

  8. 8

    根据另一个数据框重命名多列中的记录

  9. 9

    用另一个数据框熊猫中的每两列重命名

  10. 10

    使用与另一个数据框的匹配来重命名数据框列表中的列

  11. 11

    使用条件将数据从一个数据框填充到另一个数据框,然后重复填充直到条件更改

  12. 12

    用另一个数据框的列填充熊猫中的数据框列

  13. 13

    根据另一个数据框的列填充熊猫数据框列

  14. 14

    Python-启动空数据框并从另一个数据框填充

  15. 15

    如何搜索熊猫数据框以填充另一个数据框?

  16. 16

    使用另一个数据框的唯一值创建并填充一个数据框

  17. 17

    根据匹配其他列与另一个数据框的值来填充数据框的缺失值,同时保持不匹配的值

  18. 18

    根据将其他列与另一个数据框匹配的值来填充数据框的缺失值

  19. 19

    根据另一个数据框的值填充一个数据框的值

  20. 20

    创建新的数据框,该数据框填充了另一个数据框的简单计算

  21. 21

    当另一个的值满足条件时,使用向量中的值填充数据框

  22. 22

    用另一个中的相应值填充数据框

  23. 23

    从另一个Multiindexed数据框的索引填充数据框列的矢量化方法?

  24. 24

    根据来自另一个数据框的值将数据框拆分为多个数据框

  25. 25

    在mysql和php中将数据从一个数据库移动到另一个数据库时出错

  26. 26

    将数据框列添加到另一个数据框

  27. 27

    将数据框列添加到另一个数据框

  28. 28

    将数据框附加到另一个数据框的列和Python常量

  29. 29

    将特定的列与另一个数据框合并后无法选择它

热门标签

归档