tslist: Use ids to name single elements if possible
felicitaskemeny opened this issue · 6 comments
felicitaskemeny commented
Erlaube mir die folgende Issue anhand eines Kommentars von @petersteiner zu eröffnen:
# TODO: mit Christoph schauen, dass tsbox beim Umwandeln von Tibbles mit nur
# einer Variablen in Zeitreihen den Variablennamen an die Zeitreihe weitergibt
# Momentan hat es in Y_raw genau einen Jahresindikator, beim Umwandeln mittels
# ts_ts() geht deshalb der Zeitreihenname verloren. Damit dies nicht geschieht
# und damit die Prozedur auch läuft, wenn ein weiterer Jahresindikator hinzu
# käme, wird die folgende Hilfskonstruktion gemacht:
n <- length(unique(filter(Y_raw, !grepl("^kons_", id))$id))
Y_dum <- Y_raw[0, ]
if(n == 1){
Y_dum <- tibble(
time = as.Date("1995-01-01"), id = "dummy", value = NA_real_
)
}
Vielleicht kann man das vereinfachen?
christophsax commented
Ich glaube, mit unfreeze()
braucht man das nicht mehr. Ist nicht unbedingt ein Problem von tsbox.
felicitaskemeny commented
Heisst das, ich kann den folgenden Code (aus dem estim-File Kons) vereinfachen und wenn ja, wie?
# === Daten einlesen ===========================================================
inp_pre <- unfreeze(QSPath("kons"), "tbl")
# path <- file.path(getOption("QSPATH"), "kons/frozen")
Y_raw <- inp_pre$year %>%
filter(!is.na(value))
Xq_raw <- inp_pre$quarter%>%
filter(!is.na(value))
Xm_raw <- inp_pre$month %>%
filter(!is.na(value))
inp <- bind_rows(Y_raw, Xq_raw, Xm_raw)
Y <- Y_raw %>%
filter(grepl("^kons_", id)) %>%
mutate(id = gsub("^kons_", "", id)) %>%
ts_ts() %>%
window(start = start_q, end = bfs_y)
# TODO: mit Christoph schauen, dass tsbox beim Umwandeln von Tibbles mit nur
# einer Variablen in Zeitreihen den Variablennamen an die Zeitreihe weitergibt
# Momentan hat es in Y_raw genau einen Jahresindikator, beim Umwandeln mittels
# ts_ts() geht deshalb der Zeitreihenname verloren. Damit dies nicht geschieht
# und damit die Prozedur auch läuft, wenn ein weiterer Jahresindikator hinzu
# käme, wird die folgende Hilfskonstruktion gemacht:
n <- length(unique(filter(Y_raw, !grepl("^kons_", id))$id))
Y_dum <- Y_raw[0, ]
if(n == 1){
Y_dum <- tibble(
time = as.Date("1995-01-01"), id = "dummy", value = NA_real_
)
}
Xy <- Y_raw %>%
bind_rows(Y_dum) %>%
filter(!grepl("^kons_", id)) %>%
ts_ts()
Xq <- Xq_raw %>%
# Bei adjustierten Zeitreihen das Präfix 'adj_' entfernen
mutate(id = gsub("^adj_", "", id)) %>%
ts_ts() %>%
window(start = start_q, end = actual_q)
Xm <- Xm_raw %>%
ts_ts() %>%
ta(conversion = "average", to = "quarterly") %>%
window(start = start_q, end = actual_q)
christophsax commented
If a single series has an id, it should be used to label the component.
something like this:
tl <- ts_tslist(x)
if (length(tl) == 1) names(tl) <- unique(x$id)
christophsax commented
If a single series is named, this will now be used as the element's name in the tslist.
christophsax commented
E.g.,
library(tsbox)
ts_tslist(ts_pick(ts_tbl(ts_c(mdeaths, fdeaths)), "mdeaths"))
#> $mdeaths
#> Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
#> 1974 2134 1863 1877 1877 1492 1249 1280 1131 1209 1492 1621 1846
#> 1975 2103 2137 2153 1833 1403 1288 1186 1133 1053 1347 1545 2066
#> 1976 2020 2750 2283 1479 1189 1160 1113 970 999 1208 1467 2059
#> 1977 2240 1634 1722 1801 1246 1162 1087 1013 959 1179 1229 1655
#> 1978 2019 2284 1942 1423 1340 1187 1098 1004 970 1140 1110 1812
#> 1979 2263 1820 1846 1531 1215 1075 1056 975 940 1081 1294 1341
#>
#> attr(,"class")
#> [1] "tslist" "list"
Created on 2021-09-18 by the reprex package (v2.0.0)
christophsax commented
@petersteiner have you seen this?