在R中将多个二进制/分类列高效地组合为单个分类列
首先,我了解以下页面中的相关问题/答案 然而,我的问题略有不同,上述解决方案对我不起作用 给定一个包含可能重叠的二进制变量的数据集,将它们组合成单个分类列的最有效方法是什么在R中将多个二进制/分类列高效地组合为单个分类列,r,data-manipulation,binary-data,categorical-data,R,Data Manipulation,Binary Data,Categorical Data,首先,我了解以下页面中的相关问题/答案 然而,我的问题略有不同,上述解决方案对我不起作用 给定一个包含可能重叠的二进制变量的数据集,将它们组合成单个分类列的最有效方法是什么 作为一个简单的例子,考虑下面的数据集 set.seed(12345) d1<-data.frame(score=rnorm(10), Male=sample(c(rep(1,5), rep(0,5))), White=sample(c(rep(1,5),
作为一个简单的例子,考虑下面的数据集
set.seed(12345)
d1<-data.frame(score=rnorm(10),
Male=sample(c(rep(1,5), rep(0,5))),
White=sample(c(rep(1,5),rep(0,5))),
college_ed = rep(c(1,0),5))
head(d1,5)
score Male White college_ed
1 0.5855288 1 0 1
2 0.7094660 1 1 0
3 -0.1093033 0 1 1
4 -0.4534972 0 1 0
5 0.6058875 1 1 1
set.seed(12345)
d1这不是一个完美的解决方案,但应该能让你更快地完成任务。if语句不进行矢量化,但ifelse()进行矢量化:请参见下文。。。。无需使用应用功能
set.seed(12345)
d1<-data.frame(score=rnorm(10),
Male=sample(c(rep(1,5), rep(0,5))),
White=sample(c(rep(1,5),rep(0,5))),
college_ed = rep(c(1,0),5))
head(d1,5)
makeKey <- function(x,y,z){
s1 <- ifelse(x == 1,"Male", "")
s2 <- ifelse(y == 1, "White", "")
s3 <- ifelse(z == 1, "college_ed", "")
s4 <- paste(s1,s2,s3, sep = "-" )
return(s4)
}
d1$key <- makeKey(x=d1$Male, y=d1$White, z=d1$college_ed)
set.seed(12345)
好建议!我意识到,如果我把示例数据集做得更大,比较处理时间可能会更好。当我将大小增加到100万行时,您的解决方案大约快了6倍。
set.seed(12345)
d1<-data.frame(score=rnorm(10),
Male=sample(c(rep(1,5), rep(0,5))),
White=sample(c(rep(1,5),rep(0,5))),
college_ed = rep(c(1,0),5))
head(d1,5)
makeKey <- function(x,y,z){
s1 <- ifelse(x == 1,"Male", "")
s2 <- ifelse(y == 1, "White", "")
s3 <- ifelse(z == 1, "college_ed", "")
s4 <- paste(s1,s2,s3, sep = "-" )
return(s4)
}
d1$key <- makeKey(x=d1$Male, y=d1$White, z=d1$college_ed)