我有这样的数据
dataset = data.frame(id = c(1,2,1,4,5,6), class = c('a', 'a', 'b', 'a', 'b', 'b') )
我想将它转换为虚拟变量,但是插入符号的虚拟变量不会崩溃,它会返回与输入相同的行数。如何对其进行分组,以便id 1将a和b变量都设为1?
dummies <- caret::dummyvars(id ~ . , data=dataset)
predict(dummies, newdata = dataset)
答案 0 :(得分:0)
在这种情况下,对data.table使用dcast函数:
library(data.table)
setDT(dataset)
dataset[,dummy:=1]
d2 = dcast(dataset,id~class,value.var = 'dummy',fun.aggregate = length)
d2[is.na(d2)] = 0
请注意,此解决方案将返回为每个ID找到的b和b的数量。如果您只需要1或0更改,例如fun.aggregate将
fun.aggregate = function(x) as.integer(length(x) >0)
dummyVars按行方式工作,因为id
答案 1 :(得分:0)
汇总您的预测变量。因此,如果您将预测的结果存储在名为dummies2的变量中:
aggregate(. ~ id, data=dummies2, FUN=sum)