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

在R中实现多变量生态数据(站点×物种矩阵)的统一过滤方法

多变量生态学Site×Species矩阵数据处理方案

先加载你的数据集:

df <- structure(list(Site = c("A", "B", "C", "D", "E", "F", "G", "H", 
"I"), X1= c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L), X2 = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 10L, 0L), X3 = c(0L, 0L, 0L, 0L, 
0L, 3L, 6L, 0L, 0L), X4 = c(0L, 9L, 4L, 1L, 8L, 6L, 0L, 
0L, 0L), X5 = c(6L, 5L, 2L, 5L, 1L, 5L, 2L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
-9L))

一、列筛选(移除指定列,同时保留被移除数据)

1. 标记需移除的列

针对物种列(排除Site列)计算筛选条件:

# 提取所有物种列
species_cols <- df[, -1]

# 条件1:仅含1个非零值的列
col_single_nonzero <- colSums(species_cols != 0) == 1
# 条件2:列总和小于6的列
col_sum_less6 <- colSums(species_cols) < 6

# 合并条件,得到需移除的列名
cols_to_remove <- names(species_cols)[col_single_nonzero | col_sum_less6]

2. 提取被移除的列生成独立数据框

removed_cols_df <- df[, c("Site", cols_to_remove)]

3. 保留符合要求的列

df_filtered_cols <- df[, !names(df) %in% cols_to_remove]

二、行筛选(基于列筛选结果,移除指定行并保留被移除数据)

1. 标记需移除的行

基于筛选后的列,计算每行的筛选条件:

# 条件1:仅含1个非零值的行
row_single_nonzero <- rowSums(df_filtered_cols[, -1] != 0) == 1
# 条件2:行总和小于10的行
row_sum_less10 <- rowSums(df_filtered_cols[, -1]) < 10

# 合并条件,得到需移除的行索引
rows_to_remove <- rownames(df_filtered_cols)[row_single_nonzero | row_sum_less10]

2. 提取被移除的行生成独立数据框

removed_rows_df <- df_filtered_cols[row_single_nonzero | row_sum_less10, ]

3. 得到最终符合所有要求的数据框

df_final <- df_filtered_cols[!(row_single_nonzero | row_sum_less10), ]

结果说明

  • removed_cols_df:存储被移除的列(X1、X2)及对应站点信息
  • removed_rows_df:存储被移除的行(站点A、C、D、E、G、H、I)及对应筛选后列信息
  • df_final:最终保留的有效数据,包含站点B、F,物种列X3、X4、X5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:54:53