R Использование lag () для создания новых столбцов в фрейме данных - PullRequest
0 голосов
/ 12 июня 2019

У меня есть набор данных с результатами опросов для 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))))

МОЙ ЦЕЛЬ

Чтобы добавить два столбца в набор данных таким образом, чтобы -

  1. Первый столбец содержит оценку по данному вопросу в данной больнице за предыдущий год
  2. Во втором столбце содержится общее количество респондентов, ответивших на данный вопрос в заданномбольница за предыдущий год

МОЯ ПОПЫТКА

Я позвонил в первый столбец ScoreYearN-1, а во второй столбец TotalYearN-1 Я использовал функцию lagсоздать новые столбцы, которые содержат запаздывающие значения из существующих столбцов.

library(dplyr)
library(tidyr)

dataset$`ScoreYearN-1`=lag(dataset$ScoreYearN)
dataset$`TotalYearN-1`=lag(dataset$TotalYearN)

, что дает мне результирующий набор данных, в котором у меня есть желаемый результат только для первых пяти строк (эти строки соответствуют первой больнице-Конвенция вопроса).

Остальные строки не учитывают эту группировку, и, следовательно, значения 'N-1' 2015 года принимают значения предыдущей группы.

Я не уверен, что это лучший способ решить эту проблему.Если у вас есть предложения получше, я с удовольствием их рассмотрю.

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 12 июня 2019

Ты близко! Просто используйте dplyr для группировки по больнице

dataset_lagged <- dataset %>%
    group_by(Hospital,Question) %>%
    mutate(`ScoreYearN-1` = lag(ScoreYearN),
           `TotalYearN-1` = lag(TotalYearN))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...