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