在R中的列表中的不同数据框中查找相同列名的差异

时间:2018-11-05 16:44:38

标签: r list dataframe

我有一个具有相同列名的数据框列表,其中每个数据框对应一个月

June_2018 <- data.frame(Features=c("abc","def","ghi","jkl"), Metric1=c(100,200,250,450), Metric2=c(1000,2000,5000,6000))
July_2018 <- data.frame(Features=c("abc","def","ghi","jkl"), Metric1=c(140,250,125,400), Metric2=c(2000,3000,2000,3000))
Aug_2018 <- data.frame(Features=c("abc","def","ghi","jkl"), Metric1=c(200,150,250,600), Metric2=c(1500,2000,4000,2000))
Sep_2018 <- data.frame(Features=c("abc","def","ghi","jkl"), Metric1=c(500,500,1000,100), Metric2=c(500,4000,6000,8000))
lst1 <- list(Aug_2018,June_2018,July_2018,Sep_2018)
names(lst1) <- c("Aug_2018","June_2018","July_2018","Sep_2018")

我打算通过执行以下计算,在名为Percent_Change_Metric1和Percent_Change_Metric2的列表中的每个数据框中创建一个新列

for (i in names(lst1)){
lst1[[i]]$Percent_Change_Metric1 <- ((lst1[[i+1]]$Metric1-lst1[[i]]$Metric1)*100/lst1[[i]]$Metric1)
lst1[[i]]$Percent_Change_Metric2 <- ((lst1[[i+1]]$Metric2-lst1[[i]]$Metric2)*100/lst1[[i]]$Metric2)

}

但是,显然in in循环违反名称(lst1),无法正常工作

此外,我列表中的数据帧是按随机顺序排列的,而不是按月-年排序的。因此,减去连续数据帧的列的计算并不完全准确。

请告知

  1. 如何添加Percent_change_Metric1和 Percent_change_Metric2
  2. 如何选择对应的数据框 到下个月才能得出正确的Percent_Change

    感谢指导

1 个答案:

答案 0 :(得分:1)

这是base R

的一个选项
lst1[-length(lst1)] <- Map(function(x, y) 
     transform(y, Percent_Change_Metric1 = (x$Metric1 - Metric1) * 100/Metric1, 
     Percent_Change_Metric2 = (x$Metric2 - Metric2) * 100/Metric2),
          lst1[-1], lst1[-length(lst1)])