транспонировать 2 столбца против остальной части datafame R - PullRequest
1 голос
/ 24 марта 2020

У меня есть таблица данных:

Country    AcctType    Instrument    Stream        Line        sum           period
Afghanistan   A           1            D          CFD DD        133        August2019
Afghanistan   B           2            E          CFD DD        108        August2019
Afghanistan   A           3            E          CFD DD        108        September2019
Albania       A           1            D          CFD DD        374        August2019
Albania       B           2            D          CFD DD        400        September2019

Я хочу только транспонировать столбцы суммы и периода и группировать по странам сначала следующие столбцы, чтобы выходные данные выглядели так:

Country    AcctType    Instrument    Stream        Line        August2019    September2019
Afghanistan   A           1            D          CFD DD        133               -
Afghanistan   A           3            E          CFD DD        108               -
Afghanistan   B           2            E          CFD DD         -               108       
Albania       A           1            D          CFD DD        374               -
Albania       B           2            D          CFD DD         -               400        

Я знаю, что есть метод с dcast, но я не смог найти столько полезной документации по нему.

Любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Одно быстрое решение будет

library(tidyr)

df %>% 
  pivot_wider(
    names_from = period,
    values_from = sum
)

Редактировать:

# add an additional row with another month
df <- rbind(df, c("Andorra", "C", 1, "D", "CFD DD", 107, "October2019"))

df %>% 
   pivot_wider(
     names_from = period,
     values_from = sum
)

# A tibble: 6 x 8
# Country     AcctType Instrument Stream Line   August2019 September2019 October2019
# <chr>       <chr>    <chr>      <chr>  <chr>  <chr>      <chr>         <chr>    
# Afghanistan A        1          D      CFD DD 133        NA            NA         
# Afghanistan B        2          E      CFD DD 108        NA            NA         
# Afghanistan A        3          E      CFD DD NA         108           NA         
# Albania     A        1          D      CFD DD 374        NA            NA         
# Albania     B        2          D      CFD DD NA         400           NA         
# Andorra     C        1          D      CFD DD NA         NA            107        
0 голосов
/ 24 марта 2020

Мы можем использовать dcast от data.table

library(data.table)
dcast(setDT(df1), ... ~ period, value.var = 'sum')
#      Country AcctType Instrument Stream   Line August2019 September2019
#1: Afghanistan        A          1      D CFD DD        133            NA
#2: Afghanistan        A          3      E CFD DD         NA           108
#3: Afghanistan        B          2      E CFD DD        108            NA
#4:     Albania        A          1      D CFD DD        374            NA
#5:     Albania        B          2      D CFD DD         NA           400
...