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('扣分项')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值