Подводя итог: новый столбец с использованием значений из другого вектора - PullRequest
0 голосов
/ 27 февраля 2020

(Переписать. Очень плохо знаком с 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, оно работает нормально, но я не получаю этот последний столбец.

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

...