You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化多列重复代码?从ECG1-ECG20搜索831的优化方法

简洁高效的data.table实现方案

因为你使用的是data.table语法,完全不需要重复编写20行判断代码,以下是两种简洁的实现方式:

方法一:使用Reduce逐行逻辑或运算

# 初始化af_exist为0
af[, af_exist := 0]

# 一次性匹配ECG1至ECG20列,将存在"831"的行的af_exist设为1
af[Reduce(`|`, lapply(.SD, `%in%`, "831")), af_exist := 1, .SDcols = paste0("ECG", 1:20)]

代码说明

  • paste0("ECG", 1:20):自动生成ECG1到ECG20的列名,避免手动输入
  • .SDcols:指定要操作的目标列集合
  • lapply(.SD, %in%, "831"):遍历目标列,生成每个列是否包含"831"的逻辑向量列表
  • Reduce(|, ...):对每行的逻辑向量做或运算,只要任意一列匹配"831",该行结果就为TRUE
  • 最后通过逻辑筛选,将对应行的af_exist赋值为1

方法二:使用rowSums统计匹配次数

如果觉得逻辑或的写法不够直观,也可以用行求和的方式判断:

# 初始化af_exist为0
af[, af_exist := 0]

# 统计每行匹配"831"的列数,大于0则设为1
af[rowSums(sapply(.SD, `%in%`, "831")) > 0, af_exist := 1, .SDcols = paste0("ECG", 1:20)]

代码说明

  • rowSums(...):统计每行中包含"831"的列的数量
  • 只要数量大于0,就说明该行存在匹配值,将af_exist设为1

内容的提问来源于stack exchange,提问作者li jiaqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:20:48