在R列表中执行计算

时间:2013-12-02 14:07:29

标签: r list

我的数据来自KDB数据库,并作为列表返回。 该列表名为stockdata,是[8]的列表--- [1]是日期[2]是股票代码等,[8]是股票的中间价格。

我希望创建stockdata[[9]]来自stockdata[[8]]的回复 换句话说,即使它不是一个矩阵(它作为一个列表返回),它看起来像这样

[1]       [2]         etc   etc    [8]     [9]
stock     date        etc   etc    100     
stock     date        etc   etc    102     0.02       (ie 2%)
stock     date        etc   etc    104     0.0196     (ie 1.96%)

为相当随意的问题道歉,但我正在努力处理清单 - 显然也没有第一次回报,即如果我们有200行,我们只有199回报。

非常感谢

2 个答案:

答案 0 :(得分:0)

您可能需要查看? diff。所以我假设这是你在矩阵表示法中实际寻找的东西:

stockdata[ i, 9 ] = (stockdata[ i, 8 ] - stockdata[ i - 1, 8 ]) / stockdata[ i - 1, 8 ]

你可以通过

轻松实现这一目标
stockdata[[9]] <- c(
  NA,
  diff( stockdata[[8]] ) / stockdata[[8]][ -length( stockdata[[8]] ) ]
)

答案 1 :(得分:0)

如何将列表转换为数据框,只使用向量数学计算列:

stockdata<-data.frame("stock","blah","blah","blah","blah","blah","blah",seq(100,120,2))
# or stockdata<-data.frame(stockdata) to convert your list
colnames(stockdata)<-paste0("C",1:8)
stockdata$C9<-c(stockdata[1,8],stockdata[1:nrow(stockdata)-1,8])
stockdata$C9<-(stockdata$C8-stockdata$C9)/stockdata$C9
stockdata

C1   C2   C3   C4   C5   C6   C7  C8         C9
1  stock blah blah blah blah blah blah 100 0.00000000
2  stock blah blah blah blah blah blah 102 0.02000000
3  stock blah blah blah blah blah blah 104 0.01960784
4  stock blah blah blah blah blah blah 106 0.01923077
5  stock blah blah blah blah blah blah 108 0.01886792
6  stock blah blah blah blah blah blah 110 0.01851852
7  stock blah blah blah blah blah blah 112 0.01818182
8  stock blah blah blah blah blah blah 114 0.01785714
9  stock blah blah blah blah blah blah 116 0.01754386
10 stock blah blah blah blah blah blah 118 0.01724138
11 stock blah blah blah blah blah blah 120 0.01694915