Найти разницу одинаковых имен столбцов в разных фреймах данных в списке в R - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть список фреймов данных с одинаковыми именами столбцов, где каждый фрейм данных соответствует месяцу

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)

}

Однако, очевидно, цикл i in for работает против имен (lst1) и не будет работать

Кроме того, данные в моем списке расположены в случайном порядке и не упорядочены по месяцам. Поэтому вычисления для вычитания столбцов последовательных информационных фреймов не совсем точны.

Пожалуйста, сообщите

  1. Как мне поступить с добавлением Percent_change_Metric1 и Percent_change_Metric2
  2. Как выбрать соответствующий кадр данных на следующий месяц, чтобы получить правильный Percent_Change

    Спасибо за руководство

1 Ответ

0 голосов
/ 05 ноября 2018

Вот один вариант с 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)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...