Как подсчитать вхождения определенного значения в одном столбце в R

#r #count

Вопрос:

У меня есть df, такой как

 a     b     sex
yes  yes    male
no   yes    female
yes  no     male
 

Я хотел бы подсчитать и сохранить в качестве объекта только количество мужчин в столбце «Пол».

Я управляю этим:

 n_male <- length(grep('male', tbl1_df[ ,"sex"]))
n_male
 

Однако, поскольку «мужское» находится в «женском», я получаю n_male = 3 . Как я могу изменить эту функцию, чтобы сделать ее n_male = 2 ?

Ответ №1:

Основываясь на показанном примере, нет необходимости в сопоставлении подстрок. Мы можем напрямую использовать фиксированное совпадение с == и получить счетчик с sum логическим вектором

 n_male <- sum(tbl1_df$sex == 'male')
n_male
#[1] 2
 

С grep помощью , он также может соответствовать подстроке. Есть male в fe мужском.

Если мы хотим использовать grep , укажите границу слова

 n_male <- sum(grepl('\bmale\b', tbl1_df$sex))
 

Или с length/grep

 n_male <- length(grep('\bmale\b', tbl1_df$sex))
 

Кроме того, в base R , мы можем просто использовать table

 table(tbl1_df$sex)
 

чтобы получить подсчеты обоих

Ответ №2:

Если бы вы могли использовать mosaic пакет, то вы могли бы сделать:

 library(mosaic)
tally(~sex, data = tbl1_df)

sex
female   male 
     1      2 
 

Ответ №3:

count() позволяет быстро подсчитать уникальные значения одной или нескольких переменных: df %>% count(a, b)

 library(dplyr)
df %>% count(sex)