-1

以下は、私が持っているサンプルデータフレームです。

    Year - Revenue
    2001  1.23
    2002 23.4
    2003 12.4
    2004 18.0
    ...

実行中の統計を計算しようとしています - たとえば、YoY の成長です。これは、Revenue[2002] - Revenue[2001] になります。

forループを使用してこれを行うことができます。しかし、これをよりエレガントに達成するために、plyrに基本機能や何かがありますか?

4

1 に答える 1

2

提案どおりdiff、あなたが探していることを行います。データセットが大きい場合、またはグループがある場合は、dplyr を試すことができます。

require(dplyr)

dat <- read.table(header = TRUE, text = "Year Revenue
2001  1.23
2002 23.4
2003 12.4
2004 18.0")

mutate(dat, yoy = Revenue - lag(Revenue))

  Year Revenue    yoy
1 2001    1.23     NA
2 2002   23.40  22.17
3 2003   12.40 -11.00
4 2004   18.00   5.60

編集:Eddiのコメントへの返信。データのコピー方法にもいくつかの違いがあるようです。以下の dplyr からの出力を参照してくださいchanges

> dplyr_dat <- mutate(dat, yoy = Revenue - lag(Revenue))
> dplyr::changes(dat, dplyr_dat)
Changed variables:
          old new        
yoy           0x10d951400

Changed attributes:
          old         new        
names     0x10c3161b8 0x10deeb128
class     0x101ca6568 0x103668108
row.names 0x10c233f88 0x100c98a68
> diff_dat <- within(dat, yoy <- c(NA, diff(Revenue)))
> dplyr::changes(dat, diff_dat)
Changed variables:
          old         new        
Year      0x10c316180 0x11086b9f0
Revenue   0x1036b2120 0x1070c0f28
yoy                   0x110118a40

Changed attributes:
          old         new        
names     0x10c3161b8 0x10c310ff8
class     0x101ca6568 0x10f4ce7a8
row.names 0x10c1d6a38 0x10f7dca78
于 2014-02-05T02:04:14.343 に答える