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

基于Index列重编码R语言DataFrame,求更简洁实现方案

简洁解决方案

这里提供两种更简洁的实现方式,均能在1-2行内完成需求:

方案1:Tidyverse 风格(核心代码1行)

先加载工具包,再执行转换:

library(tidyverse)
df %>% mutate(across(col_a:col_d, ~ifelse(str_detect(Index, str_extract(cur_column(), "\\d")), "Yes", "No")))

逻辑说明:

  • across(col_a:col_d) 遍历所有需要转换的列
  • str_extract(cur_column(), "\\d") 从列名中提取对应规则数字(比如col_a提取1,col_b提取2)
  • str_detect(Index, ...) 检查当前行的Index是否包含该数字,匹配则返回"Yes",否则返回"No"

方案2:Base R 原生实现(1行代码)

无需额外加载包,直接用原生函数完成:

df[-1] <- t(sapply(strsplit(df$Index, ", "), \(x) replace(rep("No", 4), as.integer(x), "Yes")))

逻辑说明:

  • strsplit(df$Index, ", ") 将每行的Index分割为数字字符向量
  • replace(rep("No",4), as.integer(x), "Yes") 生成初始全为"No"的向量,将Index对应的位置替换为"Yes"
  • sapply 逐行处理后转置(t()),赋值给原数据框除Index外的所有列

验证输出

两种方法均能生成你期望的结果:

Index col_a col_b col_c col_d
1     4    No    No    No   Yes
2     1   Yes    No    No    No
3  1, 3   Yes    No   Yes    No
4     2    No   Yes    No    No
5  2, 3    No   Yes   Yes    No
6     2    No   Yes    No    No
7  3, 4    No    No   Yes   Yes
8     4    No    No    No   Yes
9     1   Yes    No    No    No

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:47