5

これらの変数の「違い」または経時変化である変数をdata.framesに簡単に追加できる簡単なRコマンドまたはパッケージがあるかどうか疑問に思っています。

私のデータが次のようになっている場合:

set.seed(1)
MyData <- data.frame(Day=0:9 %% 5+1, 
                 Price=rpois(10,10),
                 Good=rep(c("apples","oranges"), each=5))
MyData

   Day Price    Good
1    1     8  apples
2    2    10  apples
3    3     7  apples
4    4    11  apples
5    5    14  apples
6    1    12 oranges
7    2    11 oranges
8    3     9 oranges
9    4    14 oranges
10   5    11 oranges

次に、価格変数を「最初に差分」した後、私のデータは次のようになります。

   Day Price    Good P1d
1    1     8  apples  NA
2    2    10  apples   2
3    3     7  apples  -3
4    4    11  apples   4
5    5    14  apples   3
6    1    12 oranges  NA
7    2    11 oranges  -1
8    3     9 oranges  -2
9    4    14 oranges   5
10   5    11 oranges  -3
4

6 に答える 6

2

次のように簡単に実行できます。

library(reshape2)
library(dplyr)

MyNewData <- 
 MyData %.%
 melt(id = c("Good", "Day")) %.%
 dcast(Day ~ Good) %.%
 mutate(apples  = apples - lag(apples),
     oranges = oranges - lag(oranges)) %.%
 melt(id = "Day", variable.name = "Good", value.name = "P1d") %.%
 merge(MyData) %.%
 arrange(Good, Day)

よろしく

于 2014-03-24T10:19:58.447 に答える
0

オンラインの dpylr チュートリアルに従ってこのコードを思いつきました: 私の目標は、企業 (識別子 GVKEY) の R & D (変数 xrd) の 5 年間の成長率である新しい列を追加することでした。RandD2015 は生データファイルです。

パイプ機能 (%>%) を使用すると、dplyr で複数の呼び出しを組み合わせることができます。これが役立つことを願っています(スタックオーバーフローでの私の最初のコードの貢献)

library(dplyr)

RandDtest<- RandDec2015 %>% 
    group_by(GVKEY) %>%
    mutate(xrd5yr=xrd/lag(xrd,4)-1)
于 2015-12-19T19:52:42.100 に答える
0

これが私が思いついたものです。しかし、少なくとも効率的ではないようです。

MyData$P1d <- c(NA, MyData$Price[-1]-MyData$Price[-nrow(MyData)])
MyData$P1d[c(F,MyData$Good[-1]!=MyData$Good[-nrow(MyData)])] <- NA

MyData

   Day Price    Good P1d
1    1     8  apples  NA
2    2    10  apples   2
3    3     7  apples  -3
4    4    11  apples   4
5    5    14  apples   3
6    1    12 oranges  NA
7    2    11 oranges  -1
8    3     9 oranges  -2
9    4    14 oranges   5
10   5    11 oranges  -3
于 2014-03-21T11:55:32.593 に答える