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

如何基于条件提取列名生成新列,完成LIWC词汇所属类别汇总

R语言实现LIWC类别列拼接方案

方案1:tidyverse 框架实现

适合已经在使用tidyverse生态处理数据的场景:

library(dplyr)
df <- df %>%
  rowwise() %>%
  mutate(
    Categories = paste(
      names(select(., 2:75))[which(c_across(2:75) == 1)],
      collapse = ","
    )
  ) %>%
  ungroup() # 取消行分组避免后续操作出错

逻辑说明:按行遍历数据,选中第2到75列的当前行值,筛选出取值为1的位置对应的列名,用逗号拼接后赋值给新列。

方案2:base R 实现(无需加载第三方包)

适合不想依赖额外包的轻量场景:

df$Categories <- apply(df[, 2:75], MARGIN = 1, function(row_val) {
  paste(names(row_val)[row_val == 1], collapse = ",")
})

逻辑说明:通过apply函数按行遍历第2到75列,每行筛选取值为1的列名完成拼接。

补充说明

  • 如果存在词汇不属于任何LIWC类别,默认拼接结果会返回空字符串,你可以按需调整逻辑,比如替换为NA:
    # 以base R方案为例调整判断逻辑
    df$Categories <- apply(df[, 2:75], MARGIN = 1, function(row_val) {
      matched_cols <- names(row_val)[row_val == 1]
      ifelse(length(matched_cols) == 0, NA_character_, paste(matched_cols, collapse = ","))
    })
    
  • 若你的类别列索引不是固定2到75,也可以把2:75替换为starts_with("类别列统一前缀")等dplyr选择器适配你的数据结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:06:04