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

R语言处理开放题编码数据:合并向量生成计数变量实现高频类目统计

R语言多编码统计解决方案

现有操作问题说明

你之前第二步移除逗号的操作是问题核心:逗号本身是编码的分隔符,删除后1,12会变成连续字符串112,自然匹配编码1时会误命中包含1的其他编码。不需要删除逗号,反而要保留分隔符做精准匹配。

实现步骤

步骤1:修正编码合并逻辑

按行合并所有编码列,保留逗号作为分隔符,同时处理空值/NA:

# 合并第一波所有编码列,保留分隔符
df$allcodes_w1 <- apply(df[, paste0("Code_1_", 1:6)], 1, function(x) {
  # 移除空值和NA后拼接
  x_clean <- na.omit(x[x != ""])
  paste(x_clean, collapse = ",")
})

合并后每行格式为1,12,13这类标准分隔格式。

步骤2:批量生成49个编码频次变量

用精准正则匹配独立编码,避免误匹配,同时统计每个编码的提及次数:

# 批量生成1-49编码对应的频次变量
for (code in 1:49) {
  # 正则规则:编码前后只能是字符串开头/结尾、或者分隔符逗号
  pattern <- paste0("(^|,)", code, "(,|$)")
  # 统计当前编码在该行的匹配次数
  match_count <- lengths(gregexpr(pattern, df$allcodes_w1))
  # 无匹配时gregexpr返回-1,对应次数修正为0
  match_count[match_count < 0] <- 0
  # 生成对应变量
  df[[paste0("var", code)]] <- match_count
}

生成的var1到var49的值直接对应每个受访者该编码的提及次数,完全符合2=提2次、1=提1次、0=未提及的要求。

步骤3:统计编码总提及次数,输出前5类目

# 计算所有编码的总提及次数
code_total <- colSums(df[, paste0("var", 1:49)])
# 转换为易读的数据框
code_stat <- data.frame(
  编码 = as.integer(gsub("var", "", names(code_total))),
  总提及次数 = as.numeric(code_total)
)
# 按提及次数降序排序,取前5
top5_code <- head(code_stat[order(-code_stat$总提及次数), ], 5)
print(top5_code)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:27:00