Подсчет частот строк (объединенных по нескольким переменным) на основе другой строки в другой переменной в R - PullRequest
0 голосов
/ 07 октября 2018

В настоящее время я работаю со страновыми данными в R. Упрощенная версия информационного кадра в настоящее время выглядит следующим образом:

# Country1       Country2      Country3 Country4
1 Canada         United States NA       NA
2 United States  Japan         Canada   NA
3 Kenya          NA            NA       NA
4 Canada         NA            NA       NA
5 NA             NA            NA       NA
...

Поскольку я рассчитываю подсчитать все переменные страны вместе, чтобы подсчитать объединенную частотупеременных страны по всему фрейму данных, которые я использовал:

combinedfreq <- data.frame(table(unlist(dataset[c("Country1", "Country2", "Country3", "Country4")])))
combinedfreq = combinedfreq[order(-combinedfreq$Freq),]
combinedfreq

Переменная комбинированный коэффициент объединит частоты по всем 4 переменным, чтобы получить один счетчик частоты.Строки стран являются взаимоисключающими, поэтому в каждом наблюдении одну и ту же строку нельзя повторить, и она присутствует только в 1 переменной.

Для следующего шага моего исследования я хочу рассчитать общую частоту этих 4 переменных повсе наблюдения, где одна из строк соответствует определенной строке, которую я ищу, например, мне любопытно найти комбинированный фрагмент наблюдений, где «Канада» - это строка для Country1, Country2, Country3 или Country4.Если искомая строка отсутствует в наблюдении, я не хочу подсчитывать строки, присутствующие в переменных страны, для этого наблюдения.

Например, в приведенном выше примере кадра данных все страны, кромеКения будет учитываться при окончательном подсчете частоты, потому что все они делят строку с Канадой, за исключением Кении:

Var           Freq
Canada        3
United States 2
Japan         1

Как лучше всего это сделать?

1 Ответ

0 голосов
/ 08 октября 2018

Ниже приведено решение для нивелирования, которое помечает и фильтрует все строки с помощью str и находит частоты с помощью unlist() и table() (затем преобразование обратно во фрейм данных).

str <- "Canada"

read.table(text =
"Country1       Country2      Country3 Country4
1 Canada         'United States' NA       NA
2 'United States'  Japan         Canada   NA
3 Kenya          NA            NA       NA
4 Canada         NA            NA       NA
5 NA             NA            NA       NA
", header = T, stringsAsFactors = F) %>%
  mutate(flag = apply(., 1, function(x) str %in% x)) %>%
  filter(flag) %>%
  select(-flag) %>%
  unlist() %>%
  table() %>%
  tbl_df() %>%
  rename("var" = ".", "Freq" = "n")

# # A tibble: 3 x 2
#   var            Freq
#   <chr>         <int>
# 1 Canada            3
# 2 Japan             1
# 3 United States     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...