Элегантный способ подсчитать количество отрицательных элементов в векторе? - PullRequest
8 голосов
/ 12 апреля 2011

У меня есть вектор данных с 1024 значениями, и мне нужно посчитать количество отрицательных записей.Есть ли элегантный способ сделать это без зацикливания и проверки, если элемент <0 и увеличение счетчика? </p>

Ответы [ 3 ]

33 голосов
/ 12 апреля 2011

Вы хотите прочитать «Введение в R». Ваш ответ здесь просто

 sum(  x < 0  )

, который работает благодаря векторизации. Выражение x < 0 возвращает вектор логических значений, с которыми может работать sum() (путем преобразования логических значений в стандартные значения 0/1).

1 голос
/ 27 сентября 2017

Есть хороший ответ на этот вопрос от Стива Лианоглу. Как идентифицировать строки в моем кадре данных с отрицательным значением в любом столбце?

Позвольте мне просто скопировать его код с однимнебольшое сложение (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))
    
0 голосов
/ 26 декабря 2018

Вышеуказанные решения должны быть изменены, чтобы применить это для ФП. Команда ниже помогает получить количество отрицательных или любых других символических логических отношений. Предположим, у вас есть фрейм данных: df <- data.frame (x = c (2,5, -10, NA, 7), y = c (81, -1001, -1, NA, -991)) Для того, чтобы получить количество отрицательных записей в x: 'nrow (df [df $ x <0,])' </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...