Подразделение и подсчет количества значений в определенных столбцах при определенных условиях в r - PullRequest
0 голосов
/ 02 июля 2018

Я новичок в R и анализе данных. У меня есть база данных, похожая на приведенную ниже, только намного больше, и я пытался найти общий способ подсчета для каждой страны, сколько существует действий и сколько подзапросов со значением 1, значением 2 и так далее. Для каждого действия есть несколько вопросов, подвопросов и подвопросов, но я бы хотел найти способ подсчитать

1: сколько действий в каждой стране, исключая подвопросы

2: способ узнать, сколько подзапросов 1 или 2 со значением 1 существует для каждой страны, actionn и questionn.

id country questionn subquestion value      actionn
06  NIE       1          1        1           1
05  NIG       1          1        1           1
07  TAN       1          1        1           1
08  BEN       1          1        1           1
03  TOG       1          1        2           1
45  MOZ       1          1        2           1
40  ZIM       1          1        1           1
56  COD       1          1        1           1
87  BFA       1          1        1           1
09  IVC       1          1        2           1
08  SOA       1          1        2           1
02  MAL       1          1        2           1
78  MAI       1          1        2           1
35  GUB       1          1        2           1
87  RWA       1          1        2           1
41  ETH       1          1        1           1
06  NIE       1          2        2           1
05  NIG       1          2        1           1
87  BFA       1          2        1           2

Я попытался создать подмножества фрейма данных и посчитать все для каждой страны по одному, но это займет вечность, и мне было интересно, есть ли общий способ сделать это. Для первого вопроса я сделал это

df1<-df %>% group_by (country) %>% summarise (countries=county)

unique(df1)
count(df1)

Что касается второго вопроса, я думал об индивидуальном отборе и подсчете каждой строки, у которой задано Вопросы: n = 1, подзапрос = 1, значение = 1 и действие n = 1, затем выберите и посчитайте, сколько в стране с qurationn = 1, подзапрос n = 2, значение = 1, actionn = 1 и т. Д. Значение означает, является ли ответ на вопрос 1 = да или 2 = нет.

Буду признателен за любую помощь, большое спасибо:)

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Для вопроса 1 возможное решение (при условии, что название страны не уникально, а actionn может быть 0, 1,2 или более .. Всего за счет:

df%>%group_by(country)%>% summarise( "Count_actions" = sum(actionn) ) #ignores all other columns.

Если вы хотите посчитать, сколько раз страна появляется, используйте n() вместо sum(actionn, na.rm=TRUE). # Это может быть нежелательно, но иногда простое решение является лучшим (Просто посчитайте частоту страны)

Или df%>%group_by(country, actionn)%>%summarise("count_actions"= n()) даст подсчет по странам для каждого типа (скажем, 1,2 или более действий).

Версия таблицы данных dt[, .(.N), by=.(country, actionn )]

Для вопроса 2: используйте группировку для «для каждого по вашему вопросу» после установки фильтра на данные по мере необходимости. Здесь отфильтруйте подзапросы 1 или 2 со значением (и) 1 для каждой «страны, вопроса и действия»:

df%>%filter(subquestions <=2 & value==1)%>%group_by( country, question, actionn)%>%summarise("counts_desired"= n(), "sums_desired"= sum(actionn, na.rm=TRUE))

Надеюсь, это работает. Я также изучаю и применяю это к подобным данным. Не проверял и сделал определенные предположения о ваших данных (числовые и чистые). (Также для мобильного во время путешествия! Ура !!)

0 голосов
/ 02 июля 2018

По первому вопросу вы можете попытаться сделать что-то вроде этого:

df %>% filter(subquestion != 2) %>% group_by(country) %>% summarise(num_actions = n())

Это вернет количество действий на страну, удалив строки, которые не имеют 2 для столбца подзапроса. Обратите внимание, что n() в функции summarize будет подсчитывать количество наблюдений в группах (в данном случае страны).

Я не уверен, что полностью понимаю второй вопрос, но я предлагаю сделать новую метку для конкретного наблюдения, которое вы хотите знать (сколько подзапросов 1 или 2 со значением 1 существует для каждой страны, actionn и questionn):

df %>% mutate(country_question_code = paste(country, action, questionn, sep = "_")) %>% group_by(country_question_code) %>% summarize(num_subquestion = n())

...