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

如何在R中为数据框每列生成值>0的行名字符向量

R批量提取数据框列中数值大于0的行名到独立字符向量

需要处理一个数据框(示例含3列,实际有20列),为每列生成独立的字符向量,每个向量仅包含该列中数值大于0的对应行名。

示例数据框

ex.df <- structure(list(
  NASQAN2015.147.348 = c(0L, 87L, 0L, 105L, 0L),
  NASQAN2015.148.348 = c(0L, 57L, 0L, 23L, 21L),
  NASQAN2015.161.348 = c(17L, 77L, 0L, 146L, 0L)
), row.names = c(
  "ee866b92e722c35819b112aadc4ac885",
  "afc0eeec83a181be740331928d883362",
  "294c12d6881a2ed67aa1557cda9889ff",
  "466c2c4cb06ba39543c40a74c027008a",
  "fd0b270adb11f2781450c2e057e50f07"
), class = "data.frame")

预期结果

生成3个以列名为变量名的字符向量,示例如下:

NASQAN2015.147.348 # 字符向量 [1:2] "afc0eeec83a181be740331928d883362" "466c2c4cb06ba39543c40a74c027008a"
NASQAN2015.148.348 # 字符向量 [1:3] "afc0eeec83a181be740331928d883362" "466c2c4cb06ba39543c40a74c027008a" "fd0b270adb11f2781450c2e057e50f07"
NASQAN2015.161.348 # 字符向量 [1:3] "ee866b92e722c35819b112aadc4ac885" "afc0eeec83a181be740331928d883362" "466c2c4cb06ba39543c40a74c027008a"

已知单列可通过ex.df %>% filter(NASQAN2015.147.348 > 0)处理,但该方法返回数据框,无法批量生成独立向量,以下是可行解决方案:

方法1:基础R实现

用lapply遍历每一列,提取符合条件的行名,再通过list2env将列表元素转为全局环境中的独立向量:

# 生成包含所有结果的列表
result_list <- lapply(ex.df, function(col) rownames(ex.df)[col > 0])

# 将列表中的每个元素转为全局环境中的独立向量(变量名与列名一致)
list2env(result_list, envir = .GlobalEnv)

方法2:tidyverse实现

使用purrr包的map函数处理每一列,再转为全局环境变量:

library(tidyverse)

# 生成结果列表
result_list <- map(ex.df, ~ rownames(ex.df)[.x > 0])

# 转为独立向量
list2env(result_list, envir = .GlobalEnv)

注意:如果全局环境中已有与列名同名的变量,list2env会直接覆盖该变量,使用前请确认。

验证结果

运行上述代码后,直接调用列名即可得到对应的字符向量:

# 查看其中一个向量
NASQAN2015.147.348

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:50:40