我是初学者。我有一个从here获取的数据集,其中包含具有不同属性的人员配置文件,而profession
则属于这些数据集。有12个职业:管理员,蓝领,企业家,女佣,管理人员,退休人员,自雇人士,服务,学生,技术员,失业者,未知。
我想将K-NN应用于该数据集,因此我想将专业列分发到12个新列中,并将1
归因于相应的专业,并0
为所有其他11个不属于那个人的职业。
我尝试了foreach package
和for loops
,但没有成功。我无法使用foreach
,我不知道下一步该怎么做,来自以下代码:
jobs <- data[,2]
jobs
for (job in jobs) {
print(job)
#No idea how to create the new columns here, based on if conditionals
}
如何才能做到这一点?
感谢。
答案 0 :(得分:0)
你当然可以使用for循环来解决问题,但是我可以建议一个更长效的解决方案:reshape2 package(https://cran.r-project.org/web/packages/reshape2/)。
我将bank-full.csv中的数据读入对象库中的R.需要下载,安装和加载下一个reshape2包:
install.packages("reshape2")
library(reshape2)
然后可以将数据整形为一种格式,其中观察在列上的行和作业。首先将附件id
列添加到数据中:
bank$id<-1:nrow(bank)
然后,从数据框bank
获取第2列和第18列(作业和id)并将它们转换为上述形式可以完成:
tmp<-dcast(bank[,c(2, 18)], id~job, length)
这应该给出一个新的数据框tmp
,其中每个作业都有自己的专栏。由于每个id仅在数据中出现一次,因此length
函数中用于聚合数据的dcast
函数在每列中只放置0和1。
最后,可以将这些新列添加到原始数据集中:
bank<-cbind(bank[,-18], tmp[,-1])
方括号内的否定下标会删除数据集中的列,因此您可以同时删除id
列。
另一种更有效的方法是使用函数model.matrix
:
bank2<-cbind(bank, model.matrix( ~ 0 + job, bank))
这应该为您提供一个数据框,每个作业都作为一个新列。但请注意,它会稍微更改列名称(将作业添加到作业列的开头)。