2

私は、数回繰り返された、さまざまな年に基づくデータを持っています。私の出力には、年数に等しい列があり、各列は1年です。ここでの目的は、年ごとに個別にダミーを作成することです。たとえば、2000 年の出力列の値は、2000 年に平行するメイン データに NA 以外の観測値がある場合は常に「1」、それ以外の場合は「0」である必要があります。さらに、NA は NA のままでなければなりません。入力データの小さなサンプルを以下に示します。

df:
2000    NA
2001    NA
2002   -1.3
2000    1.1
2001    0
2002    NA
2000   -3
2001    3
2002    4.1

出力は次のようになります。

df1:
2000    2001    2002
 NA      NA      NA
 NA      NA      NA
 0       0       1
 1       0       0
 0       1       0
 NA      NA      NA
 1       0       0
 0       1       0
 0       0       1

可能であれば、「for ループ」を使用してこの出力を取得したいと思います。それ以外の場合は、より単純なアプローチが高く評価されます。

4

1 に答える 1

3

ループは必要ありません。使用できますmodel.matrix

## your data variable and NA index
x <- c(NA, NA, -1.3, 1.1, 0, NA, -3, 3, 4.1)
na_id <- is.na(x)

## code your year variable as a factor
year <- factor(rep(2000:2002, 3))

## original model matrix; drop intercept to disable contrast
X <- model.matrix(~ year - 1)

#  year2000 year2001 year2002
#1        1        0        0
#2        0        1        0
#3        0        0        1
#4        1        0        0
#5        0        1        0
#6        0        0        1
#7        1        0        0
#8        0        1        0
#9        0        0        1

## put NA where `x` is NA (we have used recycling rule here)
X[na_id] <- NA

#  year2000 year2001 year2002
#1       NA       NA       NA
#2       NA       NA       NA
#3        0        0        1
#4        1        0        0
#5        0        1        0
#6       NA       NA       NA
#7        1        0        0
#8        0        1        0
#9        0        0        1

マトリックスXにはいくつかの属性があります。必要に応じて、それらをドロップできます。

attr(X, "assign") <- attr(X, "contrasts") <- NULL

このマトリックスの列名を別の名前に変更することもできます。

colnames(X) <- 2000:2002
于 2016-10-01T01:34:01.883 に答える