Подсчет количества вхождений значения в столбец в r? - PullRequest
0 голосов
/ 05 мая 2020

Допустим, у меня есть такой набор данных:

          state                   address
Business - AK - Fairbanks    1234 wherever street
Business - AK - Juneau       2234 wherever street
Business - AK - Anchorage    3234 wherever street
Business - AL - Montgomery   4234 wherever street
Business - AL - Birmingham   5234 wherever street
Business - AL - Birmingham   1234 wherever street
Business - AL - Birmingham   7234 wherever street
Business - AL - Greenville   6234 wherever street
Business - AZ - Parker       7234 wherever street
Business - AZ - Parker       5234 wherever street
Business - AZ - Phoenix      8234 wherever street
Business - AZ - Tucson       9234 wherever street

И так далее и тому подобное, с записями состояния переменных и et c, вы поняли. Я хочу, чтобы он подсчитывал, сколько раз каждый штат отображается в столбце «штат», независимо от города. В идеале это будет выглядеть так:

state   total
AK       3 
AL       5
AZ       4

И так далее и так далее, очевидно, с разным счетчиком для каждого состояния в зависимости от записей. Однако мне трудно понять, как именно сделать так, чтобы он считал каждую запись состояния по своему двухбуквенному коду. Я использую dplyr и tidyverse, если это важно.

Ответы [ 2 ]

1 голос
/ 05 мая 2020
table(gsub(".*([A-Z]{2}).*", "\\1", df$state))

или, на основе stringr s функции str_extract и положительного просмотра назад и вперед:

table(str_extract(df$state, "(?<=- )[A-Z]{2}(?= -)"))

С dplyr:

df %>% mutate(state = str_extract(state, "(?<=- )[A-Z]{2}(?= -)")) %>% count(state)
0 голосов
/ 05 мая 2020

Вы можете получить состояние и использовать table для подсчета частоты.

Используйте stack, если вы хотите выводить как фрейм данных.

stack(table(sub('-.*', '', df$state)))[2:1]

#  ind values
#1 AK       3
#2 AL       5
#3 AZ       4

Использование dplyr:

library(dplyr)
df %>% mutate(state = sub('-.*', '', state)) %>% count(state)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...