Длинные и широкие изменения в данных панели, но только для определенных значений в строках

Я много просматривал Интернет, но до сих пор не нашел подходящего ответа на свой вопрос в этом конкретном случае.

Я ищу частично реструктурировать набор данных панели из длинного в широкий формат, но только для определенных значений, которые указаны их соответствующими именами/символами в строках в R.

Рассмотрим этот оригинальный формат:

          SERIES       ECONOMY      YEAR     Value
246        CPI         Panama       1960     0.05
247        CPI         Peru         1960     0.05
248        CPI         XXXXXX       1960     0.05
249        CPI         Panama       1961     0.06
250        CPI         Peru         1961     0.06
251        CPI         XXXXXX       1961     0.06
252   % Gross savings  Panama       1960     5
253   % Gross savings  Peru         1960     6
254   % Gross savings  XXXXXX       1960     7
255   % Gross savings  Panama       1961     20
256   % Gross savings  Peru         1961     21
257   % Gross savings  XXXXXX       1961     22

(И так далее по разным странам, разные показатели в столбце "СЕРИЯ", в течение 1960-2020 гг. по каждой стране и показателю.)

Я хочу сохранить «ЭКОНОМИКА» в качестве отдельного столбца, указывающего страну в том виде, в котором она была изначально видна, также сохранить год в виде столбца, но переместить каждый отдельный показатель в СЕРИИ (например, ИПЦ /% валовых сбережений) в свои собственные столбцы, подобные этому. :

          ECONOMY       YEAR      CPI      %_GROSS_SAVINGS
1         Panama        1960      0.05     5
2         Peru          1960      0.05     6
3         XXXXXX        1960      0.05     7
4         Panama        1961      0.06     20
5         Peru          1961      0.06     21
6         XXXXXX        1961      0.06     22

Любые идеи? Благодарен за ответы.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не уверен, что я следую - мне кажется, что это типичное использование pivot_wider:

library(tidyr)
dat |> pivot_wider(names_from = "SERIES",
                   values_from = "Value")

#> # A tibble: 6 x 4
#>   ECONOMY  YEAR   CPI `% Gross savings`
#>   <chr>   <dbl> <dbl>             <dbl>
#> 1 Panama   1960  0.05                 5
#> 2 Peru     1960  0.05                 6
#> 3 XXXXXX   1960  0.05                 7
#> 4 Panama   1961  0.06                20
#> 5 Peru     1961  0.06                21
#> 6 XXXXXX   1961  0.06                22

Created on 2022-04-08 by the reprex package (v2.0.0)

Воспроизводимые данные:

dat <- structure(list(SERIES = c("CPI", "CPI", "CPI", "CPI", "CPI", 
"CPI", "% Gross savings", "% Gross savings", "% Gross savings", 
"% Gross savings", "% Gross savings", "% Gross savings"), ECONOMY = c("Panama", 
"Peru", "XXXXXX", "Panama", "Peru", "XXXXXX", "Panama", "Peru", 
"XXXXXX", "Panama", "Peru", "XXXXXX"), YEAR = c(1960, 1960, 1960, 
1961, 1961, 1961, 1960, 1960, 1960, 1961, 1961, 1961), Value = c(0.05, 
0.05, 0.05, 0.06, 0.06, 0.06, 5, 6, 7, 20, 21, 22)), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

Спасибо за вашу помощь и очень быстрый ответ. Приведенная ниже функция reshape2::dcast сделала это за меня. Хорошего дня!

oserios 08.04.2022 19:45
Ответ принят как подходящий

изменить форму2

reshape2::dcast(ECONOMY + YEAR ~ SERIES, data = zz)
# Using Value as value column: use value.var to override.
#   ECONOMY YEAR %_Gross_savings  CPI
# 1  Panama 1960               5 0.05
# 2  Panama 1961              20 0.06
# 3    Peru 1960               6 0.05
# 4    Peru 1961              21 0.06
# 5  XXXXXX 1960               7 0.05
# 6  XXXXXX 1961              22 0.06

Данные

zz <- structure(list(SERIES = c("CPI", "CPI", "CPI", "CPI", "CPI", "CPI", "%_Gross_savings", "%_Gross_savings", "%_Gross_savings", "%_Gross_savings", "%_Gross_savings", "%_Gross_savings"), ECONOMY = c("Panama", "Peru", "XXXXXX", "Panama", "Peru", "XXXXXX", "Panama", "Peru", "XXXXXX", "Panama", "Peru", "XXXXXX"), YEAR = c(1960L, 1960L, 1960L, 1961L, 1961L, 1961L, 1960L, 1960L, 1960L, 1961L, 1961L, 1961L), Value = c(0.05, 0.05, 0.05, 0.06, 0.06, 0.06, 5, 6, 7, 20, 21, 22)), class = "data.frame", row.names = c("246",  "247", "248", "249", "250", "251", "252", "253", "254", "255", "256", "257"))

Другие вопросы по теме