【问题标题】:How to remove columns with specific sum but ignore others?如何删除具有特定总和但忽略其他列的列?
【发布时间】: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


    【解决方案1】:

    我们可能会使用select

    library(dplyr)
    x %>%
        select(all_of(names(.)[1:3]), where(~ is.numeric(.) && 
           sum(., na.rm = TRUE) > 0))
    

    -输出

       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
    

    在 OP 的代码中,只需添加 3 TRUE 与基于 colSums 转换为逻辑向量的逻辑输出连接

     x[c(rep(TRUE, 3), colSums(x[,4:ncol(x)]) > 0)]
      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
    

    【讨论】:

    • 是的,那些工作! dplyr 的 select 函数是可行的方法,我认为它更具可读性。只希望有一种比写出我不想触摸的所有列更简单的方法,因为在我的实际数据框中我有很多。但它现在有效!谢谢你。一旦允许,我会在 10 分钟后接受您的回答。我喜欢 select 因为我认为我的同事会更好地理解它,但是第二个代码中的 rep(TRUE,3) 非常诱人。
    • @CuriousDude 你可以使用select(all_of(names(.)[1:3]), where(~ is.numeric(.) &amp;&amp; sum(., na.rm = TRUE) &gt; 0))
    • 我更新了帖子。请检查
    • 哇,完美,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多