假设我的数据具有以下格式:

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/

10-12 21:55
查看更多