我有几个数据集,75,000个观测值和一个type可以取值0-4 的变量.我想为所有类型的每个数据集添加五个新的虚拟变量.我能想出的最佳方法如下:
# For the 'binom' data set create dummy variables for all types in all data sets
binom.dummy.list<-list()
for(i in 0:4){
binom.dummy.list[[i+1]]<-sapply(binom$type,function(t) ifelse(t==i,1,0))
}
# Add and merge data
binom.dummy.df<-as.data.frame(do.call("cbind",binom.dummy.list))
binom.dummy.df<-transform(binom.dummy.df,id=1:nrow(binom))
binom<-merge(binom,binom.dummy.df,by="id")
Run Code Online (Sandbox Code Playgroud)
虽然这很有效,但速度非常慢(合并功能甚至已经崩溃了几次).有没有更有效的方法来做到这一点?也许这个功能是我不熟悉的软件包的一部分?
我的问题是关于先前回答的关于将多个虚拟变量组合成单个分类变量的问题的详细说明.
在之前提出的问题中,分类变量是从非互斥的虚拟变量创建的.对于我的情况,我的虚拟变量是相互排斥的,因为它们代表了2X2主体间因子设计中的交叉实验条件(也有一个内部主题组件,我在这里没有解决),所以我不认为我做了interaction什么需要做.
例如,我的数据可能如下所示:
id conditionA conditionB conditionC conditionD
1 NA 1 NA NA
2 1 NA NA NA
3 NA NA 1 NA
4 NA NA NA 1
5 NA 2 NA NA
6 2 NA NA NA
7 NA NA 2 NA
8 NA NA NA 2
Run Code Online (Sandbox Code Playgroud)
我现在想制作结合ACROSS不同类型条件的分类变量.例如,具有条件A和B的值的人可能使用一个分类变量编码,并且具有条件C和D的值的人.
id conditionA conditionB conditionC conditionD factor1 factor2
1 NA 1 NA NA 1 NA
2 1 NA NA NA 1 NA
3 NA NA 1 NA NA …Run Code Online (Sandbox Code Playgroud)