应用场景:需展示出评分卡中扣了分的指标名
# 选出列序号
deduction_col_index = c(3:9,11:16,18:21,23,25:31,33:38)
# 选出dataframe
deduction_col_d = output_score[,deduction_col_index]
# 定义函数
deduction_reason_extract_by_row = function(row){
# 初始化
out_txt = ''
j = 1
# 对输入对象row,即dataframe中的一行数据,进行遍历
for(i in row){
# 此处的i为该行数据中某一列的值
if(i != 0){
# 该值若不等于0的话,取出其列名
tmp_txt = names(deduction_col_d)[j]
# 附加在out_txt上,并用逗号分隔
out_txt = paste(out_txt,tmp_txt,sep = ',')
}
j = j + 1
}
# 去掉第一个逗号
out_txt = str_sub(out_txt,start = 2)
return(out_txt)
}
# 新建一列,使用apply对该数据集进行行遍历操作
# 该方法的运算效率极高,数据量大的时候,比直接写for循环快几十倍,10W数据基本都是秒返回。
# 使用apply后需用as.vector转为向量
deduction_col_d$'扣分项' = as.vector(apply(deduction_col_d,1,deduction_reason_extract_by_row))
deduction_reason = as.data.frame(deduction_col_d['扣分项'])
names(deduction_reason) = c('扣分项')