r - 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))))
我的目标
要将两列添加到数据集,这样 -
- 第一列包含给定医院上一年给定问题的分数
- 第二列包含上一年在给定医院中针对给定问题的受访者总数
我的尝试
我调用了第一列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”值采用前一组的值。
我不确定这是解决此问题的最佳方法。如果您有更好的建议,我很乐意考虑。
任何帮助将不胜感激。
解决方案
你很近!仅用于dplyr
按医院分组
dataset_lagged <- dataset %>%
group_by(Hospital,Question) %>%
mutate(`ScoreYearN-1` = lag(ScoreYearN),
`TotalYearN-1` = lag(TotalYearN))
推荐阅读
- c# - System.Private.Uri - System.BadImageFormatException
- c++ - 查找匹配的输入并返回匹配的输入和不匹配的输入
- http - WSO2 EI 6.5.0 向服务发送简单消息 HTTP 404 错误
- java - Spring Data Query 吐出异常,我无法修复它
- c# - Creating anonymous object from linq select new
- c++ - No operator >> matches these operands ifstream
- sql-server - 如何使用 Pivot 查询结果创建另一个表或临时表
- javascript - 如何在执行 POST/PUT 请求之前检查字符串是否存在?
- php - Laravel 6 - whereHasMorph 关系返回空
- r - R基于行对的灵活条件格式