【发布时间】:2018-11-30 00:27:18
【问题描述】:
首先,我知道以下页面上的相关问题/答案。
Convert multiple binary columns to single categorical column
For each row return the column name of the largest value
但是我的问题略有不同,上面的这些解决方案对我不起作用。
给定具有可能重叠的二进制变量的数据集,将它们组合成单个分类列的最有效方法是什么?
作为一个简单的例子,考虑以下数据集
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
这里的目标是创建一个新列,该列将列出所有等于 1 的列的名称。
到目前为止,这是我提出的最佳解决方案,但我担心它有点粗糙,如果应用于更大的数据集可能效率不高。
grp_name<-function(x){
if(sum(x)==0){
z<- "None"
}else{
z<-paste(names(x[x==1]),collapse= "-")
}
return(z)
}
d1$demo<-apply(d1,1,grp_name)
score Male White college_ed demo
1 0.5855288 1 0 1 Male-college_ed
2 0.7094660 1 1 0 Male-White
3 -0.1093033 0 1 1 White-college_ed
4 -0.4534972 0 1 0 White
5 0.6058875 1 1 1 Male-White-college_ed
任何人都知道一些解决这个问题的包或对加速代码有任何建议吗?
【问题讨论】:
标签: r data-manipulation binary-data categorical-data