gpt4 book ai didi

使用 dplyr 删除总和为零的所有列

转载 作者:行者123 更新时间:2023-12-04 03:15:00 26 4
gpt4 key购买 nike

我目前正在研究一个看起来像这样的数据框:

Site  Spp1  Spp2  Spp3  LOC  TYPE
S01 2 4 0 A FLOOD
S02 4 0 0 A REG
....
S10 0 1 0 B FLOOD
S11 1 0 0 B REG

我想要做的是对数据框进行子集化,以便我可以在 R 中运行一些指标物种分析。

以下代码的作用是创建数据的两个子集,将它们合并为一帧,然后删除未使用的因子级别
A.flood <- filter(data, TYPE == "FLOOD", LOC == "A")
B.flood <- filter(data, TYPE == "FLOOD", LOC == "B")
A.B.flood <- rbind(A.flood, B.flood) %>% droplevels.data.frame(A.B.flood, except = c("A", "B"))

我也希望/需要做的是放弃所有 Spp总和为零的列(在我的真实数据集中有 ~ 60 个)。有没有办法用 dplyr 实现这一点,如果有,是否可以将该代码通过管道传输到现有的 A.B.flood数据帧代码?

谢谢!

编辑

通过仅选择总和为 > 零的列,我设法删除了所有总和为零的列:
A.B.flood.subset <- A.B.flood[, apply(A.B.flood[1:(ncol(A.B.flood))], 2, sum)!=0]

最佳答案

我意识到这个问题现在已经很老了,但是我偶然发现了另一个使用 dplyr 的“select”和“which”的解决方案,这对 dplyr 的爱好者来说似乎更清楚:

A.B.flood.subset <- A.B.flood %>% select(which(!colSums(A.B.flood, na.rm=TRUE) %in% 0))

关于使用 dplyr 删除总和为零的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34059929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com