假设我有以下格式的数据:
ID VALUE
a a
a b
d b
d c
我想做的是对 ID 值进行一次热编码。当我使用 model.matrix
时,我得到:
model.matrix(~VALUE-1, df)
ID aVALUE bVALUE cVALUE
a 1 0 0
a 0 1 0
d 0 1 0
d 0 0 1
我想要得到的是:
ID aVALUE bVALUE cVALUE
a 1 1 0
d 0 1 1
另一部分是我的数据帧大约有 3000 万行 - 所以我正在寻找一种有效的方法来做到这一点。任何帮助或评论将不胜感激!
谢谢!
最佳答案
您可以使用表格
。
d <- table(df$ID, df$VALUE)
# a b c
# a 1 2 0
# d 0 1 1
如果由于某些组合多次出现而必须强制使用 1 或 0 值,则可以将这些情况转换为 1:
d[d > 1L] <- 1
# a b c
# a 1 1 0
# d 0 1 1
示例数据
df <- structure(list(ID = c("a", "a", "a", "d", "d"), VALUE = c("a", "b", "b", "b", "c")),
.Names = c("ID", "VALUE"), class = "data.frame", row.names = c(NA, -5L))
关于r - R 中多行的一次热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679911/