首页 > 解决方案 > R 使用 lag() 在数据框中创建新列

问题描述

我有一个数据集,其中包含 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)

这给了我一个结果数据集,其中我只有前五行的预期结果(这些行对应于第一个 Hospital-Question 组合)。

其余行不考虑此分组,因此 2015 年的“N-1”值采用前一组的值。

我不确定这是解决此问题的最佳方法。如果您有更好的建议,我很乐意考虑。

任何帮助将不胜感激。

标签: r

解决方案


你很近!仅用于dplyr按医院分组

dataset_lagged <- dataset %>%
    group_by(Hospital,Question) %>%
    mutate(`ScoreYearN-1` = lag(ScoreYearN),
           `TotalYearN-1` = lag(TotalYearN))

推荐阅读