【发布时间】:2016-10-23 01:39:09
【问题描述】:
考虑一个类似于所示的数据框df1
ID EDUCATION OCCUPATION BINARY_VAR
1 Undergrad Student 1
2 Grad Business Owner 1
3 Undergrad Unemployed 0
4 PhD Other 1
您可以使用下面的 R 代码创建自己的随机 df1
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)
由此,我需要派生另一个看起来像这样的数据框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
您一定已经注意到PhD 的级别,EDUCATION 下的其他因素级别也适用,因为EDUCATION 是该ID 的最高教育级别。然而,这是次要目标。
我似乎无法找到一种方法获得一个数据框,其中每一列都给出对应于其父数据框中各个因素水平的真值。 in R 中是否有可以提供帮助的包?或者也许是一种编码方式?
我可以使用melt 执行此操作吗?
我通读了previously asked question(s),看起来相似,但它们处理的是出现频率。
编辑:
根据Sumedh 的建议,一种方法是使用caret 中的dummyVars。
dummies <- dummyVars(ID ~ ., data = df1)
df2 <- data.frame(predict(dummies, newdata = df1))
df2 <- df2 [1:7]
【问题讨论】:
-
对于您的主要目标,您可以使用
dummyVarsfromcarettopepo.github.io/caret/preprocess.html -
对于博士,您可以使用
df$Grad[df$PhD == 1] <- 1和df$Undergrad[df$PhD == 1] <- 1。也许有更好的方法。 -
成功了!关于如何获得实际目标的任何想法?
标签: r dataframe packages data-cleaning