Подсчет количества элементов со значениями x в векторе - PullRequest
361 голосов
/ 17 декабря 2009

У меня есть вектор чисел:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,
         453,435,324,34,456,56,567,65,34,435)

Как можно R посчитать, сколько раз значение x появляется в векторе?

Ответы [ 14 ]

3 голосов
/ 26 декабря 2014

Использование таблицы, но без сравнения с names:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435)
x <- 67
numbertable <- table(numbers)
numbertable[as.character(x)]
#67 
# 2 

table полезно, когда вы используете количество различных элементов несколько раз. Если вам нужен только один счет, используйте sum(numbers == x)

2 голосов
/ 26 декабря 2014

Еще один способ, который я считаю удобным:

numbers <- c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,324,34,456,56,567,65,34,435)
(s<-summary (as.factor(numbers)))

Это преобразует набор данных в фактор, а затем Summary () дает нам контрольные суммы (количество уникальных значений).

Вывод:

4   5  23  34  43  54  56  65  67 324 435 453 456 567 657 
2   1   2   2   1   1   2   1   2   1   3   1   1   1   1 

Это может быть сохранено как датафрейм, если желательно.

as.data.frame (cbind (Number = names (s), Freq = s), stringsAsFactors = F, row.names = 1: length (s))

здесь row.names используется для переименования имен строк. без использования row.names имена столбцов в s используются как имена строк в новом фрейме данных

Вывод:

     Number Freq
1       4    2
2       5    1
3      23    2
4      34    2
5      43    1
6      54    1
7      56    2
8      65    1
9      67    2
10    324    1
11    435    3
12    453    1
13    456    1
14    567    1
15    657    1
1 голос
/ 16 ноября 2018

Существуют разные способы подсчета определенных элементов

library(plyr)
numbers =c(4,23,4,23,5,43,54,56,657,67,67,435,453,435,7,65,34,435)

print(length(which(numbers==435)))

#Sum counts number of TRUE's in a vector 
print(sum(numbers==435))
print(sum(c(TRUE, FALSE, TRUE)))

#count is present in plyr library 
#o/p of count is a DataFrame, freq is 1 of the columns of data frame
print(count(numbers[numbers==435]))
print(count(numbers[numbers==435])[['freq']])
0 голосов
/ 17 декабря 2018

Это можно сделать с помощью outer, чтобы получить метрику равенств, за которой следует rowSums с очевидным значением.
Чтобы иметь счетчики и numbers в одном наборе данных, сначала создается data.frame. Этот шаг не нужен, если вы хотите раздельный ввод и вывод.

df <- data.frame(No = numbers)
df$count <- rowSums(outer(df$No, df$No, FUN = `==`))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...