簡體   English   中英

從我的數據框中創建一個虛擬變量矩陣; 使用`NA`表示缺失值

[英]Create a matrix of dummy variables from my data frame; use `NA` for missing values

我有一個基於不同年份的數據,重復了幾次。 我希望輸出的列數等於年數,每列為一年。 現在,目的是分別為每一年創建一個虛擬對象。 例如,只要與2000年平行的主數據中存在非NA觀測值,則2000年的輸出列必須具有值“ 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循環”來獲得此輸出。 否則,將理解任何更簡單的方法。

無需循環。 我們可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM