R 如何在数据集中按年索引循环
我的数据集如下所示:R 如何在数据集中按年索引循环,r,R,我的数据集如下所示: Year Risk Resource Utilization Band Percent 2014 0 .25 2014 1 .19 2014 2 .17 2014 3 .31
Year Risk Resource Utilization Band Percent
2014 0 .25
2014 1 .19
2014 2 .17
2014 3 .31
2014 4 .06
2014 5 .01
2015 0 .23
2015 1 .21
2015 2 .19
2015 3 .31
2015 4 .06
2015 5 .31
我正在尝试比较我正在使用的数据集每年的百分比变化。例如,2014年在2015年下降了2%。到目前为止,我已经创建了一个循环,每年将每个循环放入垃圾箱并运行计算。我遇到的问题是,循环正在为每个循环编制索引,因此在我的计算旁边有一堆重复的循环。这是我一直在使用的代码,非常感谢您的帮助
Results.data <- data.frame()
head(data)
percent <- 0
baseyear <- 0
nextyear <- 0
bin <- 0
yearPlus1 <-0
bin2 <-0
percent1 <-0
percent2 <-0
percentDif <-0
for(i in 1:nrow(data))
{
percent[i] <- data$PERCENT[i]
baseyear[i] <- as.numeric(data$YEAR_RISK[i])
bin[i] <- as.numeric(data$RESOURCE_UTILIZATION_BAND[i])
#print(percent[i])
#print(baseyear[i])
#print(bin[i])
}
for (k in 1:nrow(data))
{
for (j in 1:nrow(data))
{
yearPlus1 <- as.numeric(baseyear[j])-1
firstYear <- as.numeric(baseyear[k])
bin2 <-bin[j]
bin1 <- bin[k]
percent1 <- as.numeric(percent[k])
percent2 <- as.numeric(percent[j])
if(firstYear==yearPlus1 && bin1==bin2)
{
percentDif <- percent2 - percent1
print(percentDif)
Results.data <- rbind(Results.data, c(percentDif))
}
}
}
Results.data如果我理解你的问题,你可以使用分组和矢量化来避免循环。下面是一个使用dplyr
包的示例
下面的代码首先按Year\u Risk
排序,以便按时间正确排序数据。然后我们按照资源利用率\u波段
进行分组,这样我们就可以分别得到资源利用率\u波段
的每个级别的结果。最后,我们计算每年百分比的差异。lag
函数按顺序返回上一个值。(我们可以使用dplyr
链接操作符(%%>%
)将所有这些操作一个接一个地链接起来
(请注意,在导入数据时,我还通过添加下划线更改了列名,使它们成为合法的R列名。)
你能展示一些样本数据吗?对于该示例输入,您希望的输出是什么?是的。我刚刚编辑了我的原始帖子,给出了一个数据集的例子。因此,基本上我正在尝试每年比较每个摩擦频率,因此从2014年到2015年,摩擦频率降低了2%,这非常有效,比我之前的做法简单得多。非常感谢
library(dplyr)
# Year-over-year change within each Resource_Utilization_Band
# (Assuming your starting data frame is called "dat")
dat %>% arrange(Year_Risk) %>%
group_by(Resource_Utilization_Band) %>%
mutate(Change = Percent - lag(Percent))
Year_Risk Resource_Utilization_Band Percent Change
1 2014 0 0.25 NA
2 2014 1 0.19 NA
3 2014 2 0.17 NA
4 2014 3 0.31 NA
5 2014 4 0.06 NA
6 2014 5 0.01 NA
7 2015 0 0.23 -0.02
8 2015 1 0.21 0.02
9 2015 2 0.19 0.02
10 2015 3 0.31 0.00
11 2015 4 0.06 0.00
12 2015 5 0.31 0.30