Как можно суммировать уникальные значения в переменной по наблюдениям в другой переменной? - PullRequest
1 голос
/ 29 января 2020

У меня есть набор данных, содержащий информацию о посещениях больницы за определенные годы. Одна из переменных содержит коды округов для округов, в которых были посещения, а другая переменная содержит год для каждого посещения. То, что я пытаюсь сделать, это подсчитать, сколько посещений больниц в отдельных округах происходило за год. У меня есть доступ к коду SAS, который делает это, и я пытаюсь как-то дублировать его в R.

Код SAS:

proc sql;
    select ED_VISIT_YEAR, count(distinct COUNTY_CD) as Counties from dataset
    group by ED_VISIT_YEAR;
quit; run;

Я пытался использовать агрегатные и уникальные функции вместе с суммой, но я всегда получаю ошибки.

Единственное, что мне нужно для работы, это:

Check <- as.matrix(unique(ED_a$COUNTY_CD,ED_a$ED_VISIT_YEAR))

, который дает такой результат:

  V1
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 1185

я ищу что-то вроде этого:

ED_VISIT_YEAR  Counties
2005              16
2006              16
2007              16
2008              16

Я все еще довольно новичок в R, и это поставило меня в тупик, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 29 января 2020

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

ED_a %>% group_by(ED_VISIT_YEAR) %>% tally(name="counties")

Если вы не хотите использовать dplyr, базовое решение может быть следующим:

countysummaries<-as.data.frame(counties=sapply(split(ED_a,ED_a$ED_VISIT_YEAR),nrow)

Обратите внимание, что это будет дать вам годы в виде имен строк, а не столбцов, так что вы можете сделать это потом:

countysummaries$ED_VISIT_YEAR<-rownames(countysummaries)

(у тидиверса также есть rownames_to_column, но здесь мы ищем только базовое решение) .

0 голосов
/ 29 января 2020

В SQL, чтобы реплицировать COUNT(DISTINCT ...) для SQL диалектов, которые не поддерживают этот тип агрегата, таких как MS Access SQL, сначала необходимо вернуть отдельные записи в один level, затем count возвращаемых строк на конечном уровне:

SELECT Year, Count(*) As distinct_counties
FROM (SELECT DISTINCT Year, CountyCD
      FROM myTable) sub
GROUP BY Year

Поэтому в базе R запустите aggregate после вызова unique (cbind для переименования столбца):

aggregate(cbind(Counties=COUNTY_CD) ~ ED_VISIT_YEAR, 
          data = unique(ED_a$COUNTY_CD, ED_a$ED_VISIT_YEAR), 
          FUN = length)
...