Я пытаюсь подсчитать количество строк в группе, которые удовлетворяют условию, но исключаю эти подсчеты, если они появляются в последующем подсчете для другого уровня. По сути, я пытаюсь подсчитать новые и уникальные вхождения отдельных лиц в ходе последующих переписей, чтобы я мог создать кумулятивное распределение по переписи.
Обратите внимание, что образец набора данныхвзята из выборки из большего набора данных, который имеет неравные n()
значения при обработке.Кроме того, отдельные лица могут появляться в переписи, но не в следующей.
Образец набора данных
sampledata <- data.frame(treatment = c("A", "A", "H", "H", "H", "A", "A", "H", "H", "H",
"A", "A", "H", "H", "H", "A", "A", "H", "H", "H"),
individual = c("1", "2", "3", "4", "5", "1", "2", "3", "4", "5",
"1", "2", "3", "4", "5", "1", "2", "3", "4", "5"),
census = c("1", "1", "1", "1", "1", "2", "2", "2", "2", "2",
"3", "3", "3", "3", "3", "4", "4", "4", "4", "4"),
value = c("0", "0", "1", "0", "0", "0", "0", "4", "3", "0",
"0", "0", "8", "5", "2", "0", "1", "15", "7", "4"))
Это мой код, который я пытался использовать
total
общее количество лиц treatment
и census
. count
- это число лиц с value>0
для этого treatment
и census
. cum.sum
- это кумулятивное число людей с value>0
для этого treatment
и начиная с переписи 1
Если бы мне удалось получить только уникальных лиц (не учитываемых в предыдущей переписи), тогда cum.sum
никогда не должно быть больше n
.
К сожалению, как вы можете видеть, на выходе выдается кумулятивное число, превышающее фактический размер выборки n
.
library(dplyr)
sampledata$value <- as.numeric(sampledata$value)
sampledata2 <- sampledata %>%
group_by(treatment, census) %>%
summarise(count=sum(value>0), total=n()) %>%
ungroup() %>%
group_by(treatment) %>%
mutate(cum.sum=cumsum(count))
Ожидаемый результат
treatment census count total cum.sum
1 A 1 0 2 0
2 A 2 0 2 0
3 A 3 0 2 0
4 A 4 1 2 1
5 H 1 1 3 1
6 H 2 1 3 2
7 H 3 1 3 3
8 H 4 0 3 3
РЕДАКТИРОВАНИЕ / ОБЪЯСНЕНИЕ ДЛЯ ОЖИДАЕМОГО ВЫХОДА
Для treatment=H
, census=4
, переменная count=0
.Причина, по которой он равен 4, состоит в том, что у 3 человек значение выше 0 во время переписи уже было обнаружено.Я думаю, что именование переменной count
, как она есть, могло сбить с толку читателей.
Предполагается, что переменная count
ОБНАРУЖИТ строки в census
(treatment
), которые имеют value>0
и НЕ ОБНАРУЖЕНЫ ДО ПЕРЕД.