Ниже приведен образец моих данных. Я пытаюсь создать данные для таблицы данных, где данные должны быть в очень определенном порядке после того, как я использовал функцию dcast. Я также пытаюсь вычислить разницу между некоторыми столбцами. Цель состоит в том, чтобы получить данные в порядке состояния, региона, 1_2017, 1_2018, 1_diff, 2_2017, 2_2018, 2_diff и т. Д.
Я пытался вычислить разницу и упорядочить столбцы, специально вызывая каждый столбец, но это кажется очень плохим способом сделать это, особенно когда мои фактические данные содержат более 50 столбцов. Ниже приведены мои примеры данных с логикой, которую я использовал.
library(reshape2)
library(dplyr)
#Data
data<-data.frame("State"=c("AK","AK","AK","AK","AK","AK","AK","AK","AR","AR","AR","AR","AR","AR","AR","AR"),
"StoreRank" = c(1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2),
"Year" = c(2017,2018,2017,2018,2017,2018,2017,2018,2017,2018,2017,2018,2017,2018,2017,2018),
"Region" = c("East","East","West","West","East","East","West","West","East","East","West","West","East","East","West","West"),
"Store" = c("Ingles","Ingles","Ingles","Ingles","Safeway","Safeway","Safeway","Safeway","Albertsons","Albertsons","Albertsons","Albertsons","Safeway","Safeway","Safeway","Safeway"),
"Total" = c(500000,520000,480000,485000,600000,600000,500000,515000,500100,520100,480100,485100,601010,601000,501000,515100))
#Formatting data for Data table
data<-dcast(data, State+Region~StoreRank+Year, value.var = 'Total')
#Function to calculate difference between columns
diff_calculation <- function(data) {
mutate(data,
`1_diff` = data$`1_2018`-data$`1_2017`,
`2_diff` = data$`2_2018`-data$`2_2017`)}
#Applying difference calculation function
reform.data<-diff_calculation(data)
#Changes the column names from numbers to letter to try and order columns
names(reform.data)<-gsub(x = colnames(reform.data), pattern="1_", replacement = "a_")
names(reform.data)<-gsub(x = colnames(reform.data), pattern="2_", replacement = "b_")
#Trying to order columns as State, Region, 1_2017, 1_2018, 1_diff, 2_2017, 2_2018, 2_diff, etc.
ordered.data<-reform.data[,order(names(reform.data))]
final.data<-ordered.data %>%
select('State', 'Region', 'a_2017', 'a_2018', 'a_diff', 'b_2017', 'b_2018', 'b_diff')
Я надеюсь найти лучший способ для вычисления различий между столбцами и столбцами порядка после применения функции dcast к данным с большим количеством столбцов.