我有几个包含75000个观测值的数据集和一个可以取值为0-4的变量type
。 我想为每个类型添加五个新的虚拟变量到每个数据集中。 我能想到的最好方法如下:
# 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")
虽然这种方法可行,但速度非常慢(合并函数甚至有时会崩溃)。是否有更有效的方法来实现这个功能?也许这个功能是我不熟悉的包的一部分?
ifelse
是向量化的,所以如果我正确理解你的代码,你不需要那个sapply
。而且我不会使用merge - 我会使用SQLite或PostgreSQL。一些样本数据也会有所帮助 :-) - Vince