![](/img/trans.png)
[英]Create a dummy matrix where values from a column in a df are put into a matrix and where value exist = 1 and the rest =NA or 0
[英]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.