Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

reshaping dataframe before plotting the evolution of variables

I would like to plot the evolution of a lot of economic aggregates from a dataframe (if possible, by faceting to have one plot per variable). First, I need to rearrange my dataframe, changing rows into columns, but I can’t seem to manage to do it. Does anyone know how to proceed ?

My dataframe has the following structure :

 bilan_consolide               31/12/2021    31/12/2020   31/12/2019

 Goodwill                        28031         35335       72 267
 Other intangible assets         49034         61385       73 408
 Property, Plant and Equipment   1589041       1688724     1 923 267

My desired output would be something like that :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

                 Goodwill       Other intangible assets

 31/12/2019       72 267             73 408
 31/12/2020       35335              61385

I have tried this, without success (it does not give me the output I want at all) :

library(reshape)
data_wide <- reshape(test_2,direction="wide", idvar = "bilan_consolide", timevar = 
"Variable 1")
data_wide
df <- data.frame(x = seq_along(test_2[, c(2:4)]),
             test_2)
df <- melt(df, id.vars = "x")

For reproducibility, here is the head of my dataframe test_2 :

 structure(list(bilan_consolide = c("NON-CURRENT ASSETS", "Goodwill", 
 "Other intangible assets", "Property, Plant and Equipment", "Right of use", 
 "Investment property"), `31/12/2021` = c("", "28031", "49034", 
 "1589041", "1429100", "104935"), `31/12/2020` = c("", "35335", 
 "61385", "1688724", "1186918", "102998"), `31/12/2019` = c("", 
 "72 267", "73 408", "1 923 267", "1 251 255", "116 267")), row.names = c(NA, 
 6L), class = "data.frame")

>Solution :

A combination of pivot_longer() and pivot_wider() will suffice:

library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 4.2.1
#> Warning: package 'tibble' was built under R version 4.2.1

df <-  structure(list(bilan_consolide = c("NON-CURRENT ASSETS", "Goodwill", 
                                          "Other intangible assets", "Property, Plant and Equipment", "Right of use", 
                                          "Investment property"), `31/12/2021` = c("", "28031", "49034", 
                                                                                   "1589041", "1429100", "104935"), `31/12/2020` = c("", "35335", 
                                                                                                                                     "61385", "1688724", "1186918", "102998"), `31/12/2019` = c("", 
                                                                                                                                                                                                "72 267", "73 408", "1 923 267", "1 251 255", "116 267")), row.names = c(NA, 
                                                                                                                                                                                                                                                                         6L), class = "data.frame")
df |> 
  as_tibble() |> 
  pivot_longer(cols = -bilan_consolide,
               names_to = "date",
               values_to = "value") |> 
  pivot_wider(names_from = bilan_consolide,
              values_from = value) |> 
  arrange(date)
#> # A tibble: 3 × 7
#>   date       `NON-CURRENT ASSETS` Goodwill `Other intangible …` `Property, Pla…`
#>   <chr>      <chr>                <chr>    <chr>                <chr>           
#> 1 31/12/2019 ""                   72 267   73 408               1 923 267       
#> 2 31/12/2020 ""                   35335    61385                1688724         
#> 3 31/12/2021 ""                   28031    49034                1589041         
#> # … with 2 more variables: `Right of use` <chr>, `Investment property` <chr>

Created on 2022-08-02 by the reprex package (v2.0.1)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading