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

如何移除仅在单个样本ID中有值的DataFrame列?

移除仅单个样本有值的化合物列

问题背景

我有一个存储样本ID与对应化合物值的DataFrame,其中存在大量仅在单个样本ID中有非零值的列。需要移除这类列,保留至少在2个样本ID中存在非零化合物值的列。

模拟数据

df1 <- data.frame(ID = c("A","B","C","D","E","F","G","H","I"),
                  Cmpd_1 = c(5.7,0,0,0,2.5,2.1,0,6.2,1.5),
                  Cmpd_2 = c(0,0,1,0,2.8,0,0,0,0),
                  Cmpd_3 = c(0,0,3.5,0,0,0,0,0,0))

解决方案

方法1:基础R实现

计算每列(排除ID列)的非零值数量,筛选出数量≥2的列,再保留ID列和这些列:

# 计算各化合物列的非零值数量
non_zero_counts <- colSums(df1[, -1] != 0)
# 筛选出符合条件的列(非零数≥2),并保留ID列
filtered_df <- df1[, c("ID", names(non_zero_counts)[non_zero_counts >= 2])]

方法2:dplyr包实现

如果习惯用tidyverse风格,可以用dplyr::select结合where函数:

library(dplyr)

filtered_df <- df1 %>%
  select(ID, where(~ sum(. != 0) >= 2))

输出结果

运行上述代码后,得到的结果如下:

ID Cmpd_1 Cmpd_2
  A    5.7    0.0
  B    0.0    0.0
  C    0.0    1.0
  D    0.0    0.0
  E    2.5    2.8
  F    2.1    0.0
  G    0.0    0.0
  H    6.2    0.0
  I    1.5    0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:15:57