【发布时间】:2021-10-11 17:49:26
【问题描述】:
我有一个数据框,其中包含大量物种的丰度值以及元数据。我使用下面的代码删除所有丰度小于 1 的物种,但我遇到的问题是我无法弄清楚如何忽略经度数据也小于 1 的元数据列。我想保留该列并仅关注丰度值(例如数据框的最后 10 列是丰度,前 5 列是元数据值,应保持不变)。
这是我的数据框示例(迷你版):
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)
site latitude longitude sp1 sp2 sp3
1 S1 30 -43.11 0 10 1
2 S2 30 -42.23 0 4 1
3 S3 30.1 -42.10 0 9 2
我只需要获取总和为 0 的物种丰度的所有列并将其删除。我用过:
x <- x[,colSums(x[,4:ncol(x)]) > 0]
x
lat long sp2 sp3
1 30.0 -43.11 10 1
2 30.0 -42.23 4 1
3 30.1 -42.10 9 2
但我无法让它返回“站点”列...可能是因为它是我需要保留的字符列。有没有办法让表格只删除我正在设置子集的列但不理会其他所有内容?
我的目标是返回以下内容:
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
只有 sp1 被删除,因为它的总和为 0。
【问题讨论】:
标签: r