R使用lag()在数据框中创建新列

时间:2019-06-12 15:56:47

标签: r

我有一个数据集,其中包含多年以来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. 的医院
  3. 第二列包含上一年
  4. 中指定医院中给定问题的受访者总数

我的尝试

我称第一列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'值采用前一组的值。

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您接近了!只需使用dplyr即可按医院分组

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