【问题标题】:Select columns in a data frame with Negative Values选择具有负值的数据框中的列
【发布时间】:2020-09-25 05:14:28
【问题描述】:

如何在数据框中选择具有负值的列。对于下面的数据框,要选择列 x、y 和 z

data <- data.frame(x = c(-2,3,4), y = c(2,1,-5), z = c(1,-5,6), a = c(1,2,3))

【问题讨论】:

    标签: r apply sapply


    【解决方案1】:

    这里有一些其他的方法:

    1. colSums
    data[colSums(data < 0) > 0]
    
    #   x  y  z
    #1 -2  2  1
    #2  3  1 -5
    #3  4 -5  6
    
    1. Filter
    Filter(function(x) any(x < 0), data)
    
    1. select 来自dplyr
    library(dplyr)
    data %>%  select(where(~any(. < 0)))
    #select_if if you have older version
    #data %>%  select_if(~any(. < 0))
    

    【讨论】:

      【解决方案2】:

      一种方法是在 R 中使用 sapply 和 apply 函数

      x

      名字(x)

      请随意提出其他方法

      【讨论】:

        【解决方案3】:

        另一种方法是:

        data[, sapply(1:ncol(data), function(i) any(data[, i] < 0))]
        

        或使用purrr:

        data %>% purrr::keep(~any(. < 0))
        
        data %>% purrr::discard(~!any(. < 0))
        

        这将产生:

        #    x  y  z
        # 1 -2  2  1
        # 2  3  1 -5
        # 3  4 -5  6
        

        【讨论】:

        • 这就是我要采用的方法,但您可以直接在 sapply 上使用 data 而无需子集 - sapply(data, function(i) any(i &lt; 0) )
        【解决方案4】:

        data[apply(data, 2, function(col) any(col &lt; 0))]

        • expr 对向量/列表中的任何元素都成立时,any(expr) 返回 true。
        • apply(x, margin, fun),其中margin = 2 表示在列上矢量化

        【讨论】:

          猜你喜欢
          • 2018-09-21
          • 2019-06-01
          • 2023-02-04
          • 2015-03-29
          • 2022-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多