This is a rather simple task which you can probably find in other answers. Though, you can achieve what you want with data.table as follows:
library(data.table)
df = data.table( ID = 1:5, 
                 x.2019 = seq(10, 50, by = 10),
                 x.2020 = seq(20, 60, by = 10)
)
# change column names conveniently
setnames(df, c("x.2019", "x.2020"), c("2019", "2020"))
# transform the dataset from wide to long format
out = melt(df, id.vars = "ID", variable.name = "time", value.name = "x", variable.factor = FALSE)
# cast time to integer
out[ , time := as.integer(time)]
# reorder by ID
setorder(out, ID)
out
#>     ID time  x
#>  1:  1 2019 10
#>  2:  1 2020 20
#>  3:  2 2019 20
#>  4:  2 2020 30
#>  5:  3 2019 30
#>  6:  3 2020 40
#>  7:  4 2019 40
#>  8:  4 2020 50
#>  9:  5 2019 50
#> 10:  5 2020 60
Created on 2022-01-20 by the reprex package (v2.0.1)