R语言 使用apply 将每一行中值不为0的列名,用逗号拼接后生成新的一列

应用场景:需展示出评分卡中扣了分的指标名

# 选出列序号
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('扣分项')

R语言 使用apply 将每一行中值不为0的列名,用逗号拼接后生成新的一列_第1张图片

你可能感兴趣的:(R,数据处理,R)