计算向量中负数元素数量的优雅方法?

时间:2011-04-12 00:26:02

标签: r

我有一个包含1024个值的数据向量,需要计算负数条目的数量。是否有一种优雅的方法可以在不循环和检查元素是否为< 0并递增计数器的情况下执行此操作?

3 个答案:

答案 0 :(得分:32)

您想阅读'R简介'。你的回答只是

 sum(  x < 0  )

由于矢量化而起作用。 x < 0表达式返回一个布尔值向量,sum()可以操作(通过将布尔值转换为标准的0/1值)。

答案 1 :(得分:1)

Steve Lianoglou How to identify the rows in my dataframe with a negative value in any column?

对这个问题有一个很好的答案

让我用一个小的补充(第4点)复制他的代码。

  1. 想象一下,你有一个像这样的data.frame:

    df <- data.frame(a = 1:10, b = c(1:3,-4, 5:10), c = c(-1, 2:10))
    
  2. 这将返回一个布尔向量,其中的行具有负值:

    has.neg <- apply(df, 1, function(row) any(row < 0))
    
  3. 以下是负数的索引:

    which(has.neg)
    
  4. 以下是带负数的元素计数:

    length(which(has.neg))
    

答案 2 :(得分:0)

需要对上述规定的解决方案进行调整,以将其应用于df。 以下命令有助于获取负数或任何其他符号逻辑关系的计数。 假设您有一个数据框:df <-data.frame(x = c(2,5,-10,NA,7),y = c(81,-1001,-1,NA,-991)) 为了获取x中的否定记录数:'nrow(df [df $ x <0,])'