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

R语言:如何拆分多答案列并将唯一答案替换为Other

处理Data.table多答案列的低频替换与拆分方案

示例输入数据

假设你的data.table结构如下(逗号分隔多答案):

library(data.table)
dt <- data.table(
  ID = 1:5,
  "Mult answ - Favorite Fruits" = c("Apple,Banana", "Orange", "Apple,Mango", "Banana", "Mango")
)

步骤1:替换低频(仅出现1次)答案为Other

先拆分多答案列统计全局频率,再替换低频选项:

# 定位所有含"Mult answ"的列
mult_col <- grep("Mult answ", names(dt), value = TRUE)

# 拆分成行级数据统计频率
dt_long <- dt[, strsplit(get(mult_col), ","), by = ID]
setnames(dt_long, "V1", "answer")
freq <- dt_long[, .N, by = answer]

# 标记需替换的低频选项
low_freq <- freq[N <= 1, answer]

# 替换并合并回原表
dt_long[answer %in% low_freq, answer := "Other"]
dt[, updated_ans := dt_long[, paste(unique(answer), collapse = ","), by = ID]$V1]

步骤2:拆分答案为带通用后缀的独立列

将更新后的答案拆分为二进制标识列(1=选中,0=未选中),后缀用_selected:

# 获取所有唯一选项(含Other)
unique_ans <- unique(dt_long$answer)

# 生成独立列
for(ans in unique_ans){
  dt[, paste0(ans, "_selected") := as.integer(grepl(ans, updated_ans))]
}

# 清理中间列(可选)
dt[, updated_ans := NULL]

最终输出

运行后得到的结果如下:

> dt
   ID Mult answ - Favorite Fruits Apple_selected Banana_selected Orange_selected Other_selected
1:  1             Apple,Banana               1               1               0              0
2:  2                      Orange               0               0               1              0
3:  3               Apple,Mango               1               0               0              1
4:  4                      Banana               0               1               0              0
5:  5                       Mango               0               0               0              1

注意事项

  • 若多答案用其他分隔符(如分号),修改strsplit的第二个参数即可
  • 可自定义独立列的后缀,比如把_selected改成_present
  • 若需保留替换后的多答案文本,不要删除updated_ans列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:02:32