#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)