我有一个数据集,其中包含多年以来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)
哪个给了我一个结果数据集,其中我仅对前五行具有所需的结果(这些行对应于第一个Hospital-Question组合)。
剩余的行不属于此分组,因此2015年的'N-1'值采用前一组的值。
我不确定这是否是解决此问题的最佳方法。如果您有更好的建议,我们很乐意考虑。
任何帮助将不胜感激。
答案 0 :(得分:2)
您接近了!只需使用dplyr
即可按医院分组
dataset_lagged <- dataset %>%
group_by(Hospital,Question) %>%
mutate(`ScoreYearN-1` = lag(ScoreYearN),
`TotalYearN-1` = lag(TotalYearN))