R语言如何删除特定和的丰度列并保留所有元数据列
问题原因
你原代码的逻辑向量仅对应丰度列的长度,直接用于索引全表列时会被循环匹配,导致靠前的元数据列被误删。以你的示例为例,丰度列共3列,计算得到的筛选逻辑值为FALSE, TRUE, TRUE,循环匹配全表6列时会变成FALSE, TRUE, TRUE, FALSE, TRUE, TRUE,直接删掉了第一列site。
解决方案
将元数据列和筛选后的丰度列拼接即可,你可以通过定义元数据列数的方式适配不同的数据集结构:
# 示例数据集 site <- c("S1","S2","S3") lat <- c(30,30,30.1) long <- c(-43.11,-42.23,-42.10) sp1 <- c(0,0,0) sp2 <- c(10,4,9) sp3 <- c(1,1,2) x <- data.frame(site,lat,long,sp1,sp2,sp3) # 核心代码 n_meta <- 3 # 前3列为元数据,若你的数据集前5列是元数据则改为5 keep_abund <- colSums(x[, (n_meta+1):ncol(x)]) > 0 x <- x[, c(1:n_meta, which(keep_abund) + n_meta)]
执行后输出结果和你的预期一致:
site lat long sp2 sp3 1 S1 30.0 -43.11 10 1 2 S2 30.0 -42.23 4 1 3 S3 30.1 -42.10 9 2
内容的提问来源于stack exchange,提问作者CuriousDude
相关产品推荐
相关产品推荐

