假设我的数据具有以下格式:
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万行-因此,我正在寻找一种有效的方法来执行此操作。任何帮助或评论将不胜感激!
谢谢!
最佳答案
您可以使用table
。
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/