У меня есть набор данных с результатами опросов для 3 больниц за несколько лет.Этот опрос содержит 2 вопроса.
Набор данных выглядит следующим образом -
set.seed(1234)
library(dplyr)
library(tidyr)
dataset= data.frame(Hospital=c(rep('A',10),rep('B',8),rep('C',6)),
YearN=c(2015,2016,2017,2018,2019,
2015,2016,2017,2018,2019,
2015,2016,2017,2018,
2015,2016,2017,2018,
2015,2016,2017,
2015,2016,2017),
Question=c(rep('Overall Satisfaction',5),
rep('Overall Cleanliness',5),
rep('Overall Satisfaction',4),
rep('Overall Cleanliness',4),
rep('Overall Satisfaction',3),
rep('Overall Cleanliness',3)),
ScoreYearN=c(rep(runif(24,min = 0.6,max = 1))),
TotalYearN=c(rep(round(runif(24,min = 1000,max = 5000),0))))
МОЙ ЦЕЛЬ
Чтобы добавить два столбца в набор данных таким образом, чтобы -
- Первый столбец содержит оценку по данному вопросу в данной больнице за предыдущий год
- Во втором столбце содержится общее количество респондентов, ответивших на данный вопрос в заданномбольница за предыдущий год
МОЯ ПОПЫТКА
Я позвонил в первый столбец ScoreYearN-1
, а во второй столбец TotalYearN-1
Я использовал функцию lag
создать новые столбцы, которые содержат запаздывающие значения из существующих столбцов.
library(dplyr)
library(tidyr)
dataset$`ScoreYearN-1`=lag(dataset$ScoreYearN)
dataset$`TotalYearN-1`=lag(dataset$TotalYearN)
, что дает мне результирующий набор данных, в котором у меня есть желаемый результат только для первых пяти строк (эти строки соответствуют первой больнице-Конвенция вопроса).
Остальные строки не учитывают эту группировку, и, следовательно, значения 'N-1' 2015 года принимают значения предыдущей группы.
Я не уверен, что это лучший способ решить эту проблему.Если у вас есть предложения получше, я с удовольствием их рассмотрю.
Любая помощь будет принята с благодарностью.