如何从含字符列的二进制矩阵格式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
相关产品推荐
相关产品推荐

