考慮一個數據幀df1
類似於所示的一個一個炎熱的編碼中的R數據幀
ID EDUCATION OCCUPATION BINARY_VAR
1 Undergrad Student 1
2 Grad Business Owner 1
3 Undergrad Unemployed 0
4 PhD Other 1
您可以創建以下
ID <- c(1:4)
EDUCATION <- sample (c('Undergrad', 'Grad', 'PhD'), 4, rep = TRUE)
OCCUPATION <- sample (c('Student', 'Business Owner', 'Unemployed', 'Other'), 4, rep = FALSE)
BINARY_VAR <- sample(c(0, 1), 4, rep = TRUE)
df1 <- data.frame(ID, EDUCATION, OCCUPATION, BINARY_VAR)
# Convert to factor
df1[, names(df1)] <- lapply(df1[, names(df1)] , factor)
您自己的隨機df1
使用R-代碼這需要推導出看起來像這樣的另一個數據幀df2
ID Undergrad Grad PhD Student Business Owner Unemployed Other BINARY_VAR
1 1 0 0 1 0 0 0 1
2 1 1 0 0 1 0 0 1
3 1 0 0 0 0 1 0 0
4 1 1 1 0 0 0 1 1
你一定注意到的水平,EDUCATION
下的其他因子水平也成立,因爲EDUCATION
是ID
的最高教育水平。然而,這是次要目標。
我似乎無法找出方式獲得一個數據幀,每列給出與其父數據幀中的各個因子水平對應的真值。 R中是否有包裝?或者也許是一種方法來編碼?
我可以用melt
這麼做嗎?
我通過previously asked question(s)看過看起來類似,但它們處理的發生頻率。
編輯:
所推薦的Sumedh,一個辦法做到這一點是使用dummyVars
從caret
。
dummies <- dummyVars(ID ~ ., data = df1)
df2 <- data.frame(predict(dummies, newdata = df1))
df2 <- df2 [1:7]
爲了您的主要目標,您可以使用'caret'中的'dummyVars' http://topepo.github.io/caret/preprocess.html – Sumedh
對於PhD,您可以使用'df $ Grad [df $ PhD == 1] < - 1'和'df $ Undergrad [df $ PhD == 1] < - 1'。也許有更好的方法。 – Sumedh
工作!有關如何獲得實際目標的任何想法? – aayush