Cómo agrupar por una columna y pivotar más ancho en R
Tengo un marco de datos que estoy tratando de agrupar por una columna y pivot_wider. Aquí está mi marco de datos
df = structure(list(Date = structure(c(1608238800, 1608238800, 1608238800,
1608238802, 1608238800, 1608238800, 1608238802, 1608238800, 1608238800,
1608238802, 1608238802, 1608238800, 1608238800, 1608238800, 1608238802,
1608238800, 1608238800, 1608238800), tzone = "America/New_York", class = c("POSIXct",
"POSIXt")), Last = c(56.15, 7.9, 196.29, 311, 458.07, 18.38,
377.08, 70.61, 4.02, 372.19, 15.7, 391.2, 9.1, 66.62, 176.25,
6.9, 28.74, 128.7), ticker = c("FAS", "FAZ", "IWM", "QQQ", "SOXL",
"SOXS", "SOXX", "SPXL", "SPXS", "SPY", "SQQQ", "TECL", "TECS",
"TNA", "TQQQ", "TZA", "XLF", "XLK"), Core = c("XLF", "XLF", "IWM",
"QQQ", "SOXX", "SOXX", "SOXX", "SPY", "SPY", "SPY", "QQQ", "XLK",
"XLK", "IWM", "QQQ", "IWM", "XLF", "XLK"), Type = c("ETNBull",
"ETNBear", "ETF1x", "ETF1x", "ETNBull", "ETNBear", "ETF1x", "ETNBull",
"ETNBear", "ETF1x", "ETNBear", "ETNBull", "ETNBear", "ETNBull",
"ETNBull", "ETNBear", "ETF1x", "ETF1x")), row.names = c(NA, -18L
), groups = structure(list(ticker = c("FAS", "FAZ", "IWM", "QQQ",
"SOXL", "SOXS", "SOXX", "SPXL", "SPXS", "SPY", "SQQQ", "TECL",
"TECS", "TNA", "TQQQ", "TZA", "XLF", "XLK"), .rows = structure(list(
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, 18L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
head(df)
Date Last ticker Core Type
1 2020-12-17 56.2 FAS XLF ETNBull
2 2020-12-17 7.9 FAZ XLF ETNBear
3 2020-12-17 196. IWM IWM ETF1x
4 2020-12-17 311 QQQ QQQ ETF1x
5 2020-12-17 458. SOXL SOXX ETNBull
6 2020-12-17 18.4 SOXS SOXX ETNBear
Me gustaría agrupar por "Core" y pivotar más ancho usando Tipo como las nuevas columnas y ticker como los valores. Por ejemplo, me gustaría que mi nuevo marco de datos pareciera así
Date Last Core ETNBull ETNBear ETF1x
1 2020-12-17 56.2 XLF FAS FAZ XLF
2 2020-12-17 7.9 IWM TNA TZA IWM
.
.
Puedes ver que nos agrupamos por "Core" y luego se difundió por "Tipo" usando "ticker" como los valores.
Aquí hay un ejemplo de un intento que no tuvo los resultados deseados
df %>% group_by(Core) %>% pivot_wider(names_from = Type, values_from = ticker)
Pregunta hecha hace 3 años, 5 meses, 5 días - Por techtrailblazer8d2c
3 Respuestas:
-
Tal vez estás buscando:
library(dplyr) library(tidyr) df %>% pivot_wider(names_from = Type, values_from = ticker) %>% group_by(Core) %>% fill(ETNBull:ETF1x, .direction = 'updown')
Respondida el Dec 18, 2020 a las 05:01 - por daniel1
Votos positivos: 0 | Votos negativos: 0 -
Para lograr el resultado deseado, puedes utilizar la función
pivot_wider
de la libreríatidyverse
en R de la siguiente manera:R library(tidyverse) df <- df %>% pivot_wider(names_from = Type, values_from = ticker) head(df)
Esto pivotará tu marco de datos según la columna "Type" y colocará los valores de la columna "ticker" en las nuevas columnas correspondientes a cada valor único de "Type".
Respondida el Dec 19, 2020 a las 04:59 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para agrupar por la columna
Core
y pivotar el dataframedf
más ancho utilizandoType
como las nuevas columnas yticker
como los valores, puedes utilizar la siguiente función:r library(dplyr) library(tidyr) df %>% group_by(Core) %>% pivot_wider(names_from = Type, values_from = ticker)
Esta función creará un nuevo marco de datos con una columna para
Core
, una columna paraDate
y una columna paraLast
, seguido de una columna para cada valor único deType
. Los valores de estas columnas serán los valores deticker
correspondientes a cada combinación deCore
yType
.Ejemplo:
Aplicando esta función a tu marco de datos
df
proporcionado, obtendrás el siguiente resultado:r df_pivoted <- df %>% group_by(Core) %>% pivot_wider(names_from = Type, values_from = ticker) head(df_pivoted)
> # A tibble: 6 × 5
> Core Date Last ETNBull ETNBear ETF1x
>
> 1 IWM 2020-12-17 196. TNA TZA IWM
> 2 QQQ 2020-12-17 311 QQQ SQQQ QQQ
> 3 SOXX 2020-12-17 458. SOXL SOXS SOXX
> 4 SPY 2020-12-17 372. TECL SPXS SPY
> 5 XLF 2020-12-17 56.2 FAS FAZ XLF
> 6 XLK 2020-12-17 28.7 TECL TZA XLK
Como puedes ver, el marco de datos resultante está agrupado por
Core
y tiene columnas paraDate
,Last
,ETNBull
,ETNBear
yETF1x
. Los valores de estas columnas son los valores deticker
correspondientes a cada combinación deCore
yType
.Respondida el Dec 19, 2020 a las 05:03 - por Gemini
Votos positivos: 0 | Votos negativos: 0