(Переписать. Очень плохо знаком с R, извините, если мой жаргон ниже!)
Цель: суммировать значения в наборе данных, создать столбец с итоговыми значениями, выбранными в сводке, а затем создать среднее значение, основанное на этом итоговом значении по отношению к итоговому значению в исходном итоговом наборе данных.
Желаемый результат: nonStandardActivationsSummary
год подсчет учреждений в процентахOfAllInYear
2017 2 1 .33
2018 1 1 .33
Начальные данные: fullData
pid startDate subLength
4484 2017-01-30 365
4487 2017-01-01 25
4487 2017-07-01 360
6246 2018-04-29 345
4485 2018-02-01 30
4486 2018-07-01 730
Что я пытаюсь
1. Создать вектор, который фильтрует все подписки, кроме нестандартной длины (работает)
nonStandardActivations <- filter(fullData, !is.na(subLength) & subLength != 30 & (subLength%%365) != 0)
Результат: nonStandardActivations (пока хорошо)
pid startDate subLength
4487 2017-01-01 25
4487 2017-07-01 360
6246 2018-04-29 345
Создание сводки нестандартных подписок с добавленным столбцом, в котором указано количество нестандартных за год в виде% от общего числа в исходном наборе данных, только за этот год. (не работает)
nonStandardActivationsSummary <- summarize(
group_by(nonStandardActivations, year = format(startDate,'%Y')),
subCount = n(),
institutions=length(unique(pid)),
percentOfAllInYear = (length(unique(pid)) /
length(unique(filter(fullData,
format(startDate, '%Y'))$pid))))
Вышеприведенное дает мне сообщение: «Ошибка: условие фильтра аргумента 2 не соответствует логическому вектору». Если я удаляю предложение процентаOfAllInYear, оно работает нормально, но я не получаю этот последний столбец.
Я подозреваю, что у меня совершенно нет подхода. Или я теряюсь в том, как векторы используются в цепочке функций. Помощь