假设您有一个训练数据集,如下所示:
User_ID Screen_ID Age
1 4 1
2 7 0
3 9 1
3 11 1
. . .
. . .
. . .
我有一个与上面相同格式的测试集,没有Age的值。我想在我的模型中使用Screens_ID作为自变量。我是否必须转置数据集,以便唯一的Screen_ID为列,如下所示:
Screen ID
User ID 4 7 9 11 . . .
1 1 0 0 0
2 0 1 0 0
3 0 0 1 1
或者我可以使用第一个表格中的格式来建模这些数据。我问的原因是转置这些数据会占用太多内存。
答案 0 :(得分:0)
我想你想在这里创建虚拟变量。您可以使用caret执行此操作。
例如,获取与您类似的数据
a=as.data.frame(matrix(c(1,2,3,3,4,9,10,11,12,13),ncol=2))
会给出
>a
V1 V2
1 1 9
2 2 10
3 3 11
4 3 12
5 4 13
在此
上使用插入符号的dummyVar方法library(caret)
to_change=as.factor(a$V2)
to_change=as.data.frame(to_change)
dummies <- dummyVars( ~ ., data = to_change)
dummy_vars=as.data.frame(predict(dummies, newdata = to_change))
pre_final=cbind(V1=a[,1],dummy_vars)
通过用户ID或在我的案例V1中汇总这个,你得到你的需求。数据
df= aggregate(.~V1, data=pre_final, sum, na.rm=TRUE)
给出
V1 to_change.9 to_change.10 to_change.11 to_change.12 to_change.13
1 1 1 0 0 0 0
2 2 0 1 0 0 0
3 3 0 0 1 1 0
4 4 0 0 0 0 1