0

これは、私の時系列の断面データがどのように構造化されているかです。

country     year group  change
Afghanistan 1980   1      0 
Afghanistan 1981   1      0 
Afghanistan 1982   1      1 
Afghanistan 1983   1      0 
Afghanistan 1984   1      0 
Afghanistan 1985   1      1 
Afghanistan 1986   1      0 
Afghanistan 1987   1      2 
Afghanistan 1988   1      0 
Bhutan      1980   2      0 
Bhutan      1981   2      0 
Bhutan      1982   2      0 
Bhutan      1983   2      0 
Bhutan      1984   2      1 
Bhutan      1985   2      0 
Bhutan      1986   2      0 
Bhutan      1987   2      0 
Bhutan      1988   2      2 
Chile       1980   3      0

変数の変化は、プラスの変化があった場合は「1」、マイナスの変化があった場合は「2」です。

問題

2 つの新しい変数の作成に苦労しています。

(1)「トレンド」という変数

簡単に言うと、この変数は「各グループ (国-年) について、変化 = 1 の場合は傾向 = 1、変化 = 2 までのみ」を表す必要があります。

(2)「時間」という変数

この変数は、正のトレンド (change =1) の前後の年数を指定する必要があります。

つまり、最終的に、データセットは次のようになります。

country     year group  change  trend  time
Afghanistan 1980   1      0      0      -2
Afghanistan 1981   1      0      0      -1
Afghanistan 1982   1      1      1       1
Afghanistan 1983   1      0      1       2
Afghanistan 1984   1      0      1       3
Afghanistan 1985   1      1      1       4
Afghanistan 1986   1      0      1       5
Afghanistan 1987   1      2      0       0
Afghanistan 1988   1      0      0       0
Bhutan      1980   2      0      0      -4
Bhutan      1981   2      0      0      -3
Bhutan      1982   2      0      0      -2
Bhutan      1983   2      0      0      -1
Bhutan      1984   2      1      1       1
Bhutan      1985   2      0      1       2
Bhutan      1986   2      0      1       3
Bhutan      1987   2      0      1       4
Bhutan      1988   2      2      0       0
Chile       1980   3      0      0       0

グループを分離するには、「分割」を使用できると思います。

data$trend <- split(data$group, data$group)  # separate by unique values
[...]
data$trend <- unsplit(data$trend, data$group)  # make back into a vector

BUT : これら 2 つの行の間のコマンドは何でしょうか?

この行はシーケンスを生成します

data.time$trend <- lapply(data.time$trend, seq)

BUT : プラスの傾向、すなわち data$trend==1 に制限するにはどうすればよいですか?

どんなアイデアでも大歓迎です!どうもありがとう。

4

2 に答える 2

3

以下のようなことができます。キーは明らかに適切に書くことmyFuncです。

DF
##        country year group change
## 1  Afghanistan 1980     1      0
## 2  Afghanistan 1981     1      0
## 3  Afghanistan 1982     1      1
## 4  Afghanistan 1983     1      0
## 5  Afghanistan 1984     1      0
## 6  Afghanistan 1985     1      1
## 7  Afghanistan 1986     1      0
## 8  Afghanistan 1987     1      2
## 9  Afghanistan 1988     1      0
## 10      Bhutan 1980     2      0
## 11      Bhutan 1981     2      0
## 12      Bhutan 1982     2      0
## 13      Bhutan 1983     2      0
## 14      Bhutan 1984     2      1
## 15      Bhutan 1985     2      0
## 16      Bhutan 1986     2      0
## 17      Bhutan 1987     2      0
## 18      Bhutan 1988     2      2


myFunc <- function(x) {
    trend <- rep(0, nrow(x))

    trendStart <- which(x$change == 1)[1]
    trendEnd <- which(x$change == 2)[1] - 1

    trend[seq(from = trendStart, to = trendEnd)] <- 1

    time <- c(seq(from = 1 - trendStart, to = -1), seq(from = 1, to = trendEnd + 1 - trendStart), rep(0, nrow(x) - trendEnd))

    return(cbind(x, trend, time))

}

LL <- split(DF, DF$group)

do.call(rbind, lapply(LL, myFunc))
##          country year group change trend time
## 1.1  Afghanistan 1980     1      0     0   -2
## 1.2  Afghanistan 1981     1      0     0   -1
## 1.3  Afghanistan 1982     1      1     1    1
## 1.4  Afghanistan 1983     1      0     1    2
## 1.5  Afghanistan 1984     1      0     1    3
## 1.6  Afghanistan 1985     1      1     1    4
## 1.7  Afghanistan 1986     1      0     1    5
## 1.8  Afghanistan 1987     1      2     0    0
## 1.9  Afghanistan 1988     1      0     0    0
## 2.10      Bhutan 1980     2      0     0   -4
## 2.11      Bhutan 1981     2      0     0   -3
## 2.12      Bhutan 1982     2      0     0   -2
## 2.13      Bhutan 1983     2      0     0   -1
## 2.14      Bhutan 1984     2      1     1    1
## 2.15      Bhutan 1985     2      0     1    2
## 2.16      Bhutan 1986     2      0     1    3
## 2.17      Bhutan 1987     2      0     1    4
## 2.18      Bhutan 1988     2      2     0    0
于 2013-04-25T03:48:50.997 に答える