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

如何从含字符列的二进制矩阵格式tibble中生成列和大于0的列名向量

解决方法:提取列和大于0的列名

你其实完全不用折腾“移除第一列再重新添加”的操作——我们只需要针对性处理那些二进制格式的列就行,原数据的结构根本不需要改动。

先模拟你的数据方便测试:

library(tibble)

df <- tibble(
  Aufzeichnungen = c(
    "Aufzeichnungen", 
    "07.03.22 A: stechender Schmerz, scharfkantig", 
    "D/B:", "T:", 
    "pat aht an 36 üz distal, seit paartagen", 
    "36 vipr++, perk-, keine c zu entdekcne,üz bilfuird", 
    "pat aufgekläörtggf RÖ um c auszuschileßen, pat verweigert RÖ aus Angst vor Strahlung, pat", 
    "aufgeklärt angst nicht nötig und c unter fllg oder apprx nicht auszuschließen,", 
    "pat knirscht, schiene empohlen, pat meldet sich..", 
    "next: noch schmerezn", 
    "an 36?"
  ),
  `2010` = c("0", "0", "0", "0", "1", "1", "0", "0", "0", "0", "0"),
  `0070` = c("0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0"),
  Ä1 = c("0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0"),
  Ä5 = c("0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0"),
  `0010` = c("0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0")
)

方法一:用tidyverse工具(dplyr + purrr)

适合熟悉tidyverse生态的场景,代码可读性更强:

library(dplyr)
library(purrr)

target_cols <- df %>%
  # 排除第一列字符型列,通用写法可用select(where(~!is.character(.x)))选择所有非字符列
  select(-Aufzeichnungen) %>%
  # 将每列的字符转成数值后求和
  map_dbl(~ sum(as.numeric(.x))) %>%
  # 只保留列和大于0的项
  keep(~ .x > 0) %>%
  # 提取最终目标列名
  names()

target_cols
# 输出结果:[1] "2010" "0070" "Ä1"   "Ä5"

方法二:基础R实现

不想加载额外包的话,基础R也能轻松完成需求:

# 提取除第一列外的所有列
num_cols <- df[, -1]
# 将每个列转成数值并计算列和
col_sums <- colSums(sapply(num_cols, as.numeric))
# 筛选出列和大于0的列名
target_cols <- names(col_sums[col_sums > 0])

target_cols
# 输出结果:[1] "2010" "0070" "Ä1"   "Ä5"

通用小技巧

如果你的数据里有多个字符型列(不止第一列),可以用select(where(is.character))批量排除所有字符列,这样代码会更灵活,不用硬编码列名或位置。

内容的提问来源于stack exchange,提问作者KC-Migo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:27:51