Как посчитать частоту значения в столбце? - PullRequest
0 голосов
/ 22 января 2020

Я хотел бы посчитать, сколько каждого значения появляется в столбце. Значения, которые могут встречаться в этом столбце, находятся в диапазоне от 1 до 15, поэтому я хотел бы, чтобы код возвращал вектор из 15 значений с 0, если значение не встречается в столбце, и, например, 5, если значение встречается. Поскольку мне приходилось много раз запускать код, я не хотел использовать для l oop просмотр каждого значения и подсчет его, поэтому я использовал функцию table (). Прямо сейчас я попробовал это:

N_k = rep(0,K) #make a zero vector for the number of people in a cluster
  table = as.data.frame(table(c(2,1,1,6,2,12,15,2,3,3,4,5,8,2))) #count number of people per cluster
  for (z in unique(table[,1])) {N_k[z] = table[table[,1]==z,2]}

Однако по какой-то причине он возвращает:

> N_k
                                              1  2  3  4  5  6  8 12 15 
 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  2  4  2  1  1  1  1  1  1 

Я хотел бы, чтобы он вернулся:

> N_k
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15                     
 2  4  2  1  1  1  0  1  0  0  0  1  0  0  1  

1 Ответ

0 голосов
/ 22 января 2020

Если вы действительно хотите получить вектор с числом, вы можете сделать это:

# make a toy vector that matches the desired results you posted
z <- c(rep(1,2), rep(2,4), rep(3,2), 4, 5, 6, 8, 12, 15)

# run sapply over a complete sequence of integers up to the max in your vector
sapply(seq(max(z)), function(x) sum(z == x))

Результат:

 [1] 2 4 2 1 1 1 0 1 0 0 0 1 0 0 1

Если вы хотите, чтобы имена были присоединены к этому вектору, вы можете запустить names(vector) <- seq(max(z)). Это дает вам ...

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
 2  4  2  1  1  1  0  1  0  0  0  1  0  0  1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...