从插入符R

时间:2016-02-08 06:52:57

标签: r r-caret

我有这样的数据

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)

2 个答案:

答案 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)