1

gvkey(1001、1384 など)によって認識される企業の四半期データの価格の変化率を計算しようとしています。対応する四半期の株価PRCCQ.

    gvkey  PRCCQ
1   1004 23.750
2   1004 13.875
3   1004 11.250
4   1004 10.375
5   1004 13.600
6   1004 14.000
7   1004 17.060
8   1004  8.150
9   1004  7.400
10  1004 11.440
11  1004  6.200
12  1004  5.500
13  1004  4.450
14  1004  4.500
15  1004  8.010

私がやろうとしているのは、1 四半期の収益、2 四半期の収益などを示す 8 つの列を 8 四半期まで追加することです。delt関数 とquantmodddply使用して、各 PRCCQ の 1 四半期の収益を計算できました。plyrまた、同じコードを変更して を使用して 2 四半期の収益を取得することもできましたk

ddply(data, "gvkey", transform,  DeltaCol = Delt(PRCCQ,k=2))

ただし、この方程式では、異なる行数のエラーが発生しk=2ない場合よりも高くすることはできません2,3 。現在、多くの代替方法を使用してみましたが、うまくいきません。置き換えなければならないコードにプラグインできる機能はありますか、それとも別の完全に代替のコード行で、個々の列に 8 四半期すべての収益を表示できますか?ddplyDelt

4

2 に答える 2

1

あなたはあなたのデータをとして宣言し、ts()使用することができますcbind()diff()

data <- read.table(header=T,text='gvkey  PRCCQ
   1004 23.750
   1004 13.875
   1004 11.250
   1004 10.375
   1004 13.600
   1004 14.000
   1004 17.060
   1005  8.150
   1005  7.400
  1005 11.440
  1005  6.200
  1005  5.500
  1005  4.450
  1005  4.500
  1005  8.010')

data <- split(data,list(data$gvkey))
(newdata <- do.call(rbind,lapply(data,function(data) { data <- ts(data) ; cbind(data,Quarter=diff(data[,2]),Two.Quarter=diff(data[,2],2))})))

      data.gvkey data.PRCCQ Quarter Two.Quarter
 [1,]       1004     23.750      NA          NA
 [2,]       1004     13.875  -9.875          NA
 [3,]       1004     11.250  -2.625     -12.500
 [4,]       1004     10.375  -0.875      -3.500
 [5,]       1004     13.600   3.225       2.350
 [6,]       1004     14.000   0.400       3.625
 [7,]       1004     17.060   3.060       3.460
 [8,]       1005      8.150      NA          NA
 [9,]       1005      7.400  -0.750          NA
[10,]       1005     11.440   4.040       3.290
[11,]       1005      6.200  -5.240      -1.200
[12,]       1005      5.500  -0.700      -5.940
[13,]       1005      4.450  -1.050      -1.750
[14,]       1005      4.500   0.050      -1.000
[15,]       1005      8.010   3.510       3.560

編集:

別の方法、なしsplit()lapply()(おそらくより速い)

data <- read.table(header=T,text='gvkey  PRCCQ
       1004 23.750
       1004 13.875
       1004 11.250
       1004 10.375
       1004 13.600
       1004 14.000
       1004 17.060
       1005  8.150
       1005  7.400
      1005 11.440
      1005  6.200
      1005  5.500
      1005  4.450
      1005  4.500
      1005  8.010')
newdata <- do.call(rbind,by(data, data$gvkey,function(data) { data <- ts(data) ; cbind(data,Quarter=diff(data[,2]),Two.Quarter=diff(data[,2],2))}))
于 2013-02-15T18:33:55.503 に答える
0
df <- read.table(text="gvkey  PRCCQ
1  1004  5.500
2  1004  4.450
3  1004  4.500
4  1004  8.010
5  1005  4.450
6  1005  4.500",header=TRUE)

library(plyr)
library(quantmod)
ddply(df, "gvkey", transform, DeltaCol = Delt(PRCCQ,k=3))
#error

Delt2 <- function(x,k) {
  if(length(x)>k) as.vector(Delt(x1=x,k=k)) else rep(NA,length(x))
}

ddply(df, "gvkey", transform, DeltaCol = Delt2(PRCCQ,k=3))
#  gvkey PRCCQ  DeltaCol
#1  1004  5.50        NA
#2  1004  4.45        NA
#3  1004  4.50        NA
#4  1004  8.01 0.4563636
#5  1005  4.45        NA
#6  1005  4.50        NA
于 2013-02-15T18:44:07.970 に答える