13 Datos desordenados
13.1 Introducción
ioname | year | albania | algeria |
---|---|---|---|
ACPEU | 1990 | 0 | 0 |
ACSSRB | 1990 | 0 | 0 |
CAMES | 1990 | -9 | -9 |
ACI | 1990 | 0 | 0 |
AfDB | 1990 | 0 | 1 |
AFGEC | 1990 | 0 | 0 |
Ahora ya tenemos un conocimiento general sobre qué se entiende por datos desordenados. Esta situación se da cuando las observaciones no concuerdan con las filas o cuando las variables no concuerdan con las columnas en un conjunto de datos. Teniendo esto en cuenta, si refrescamos la memoria, es posible que haya pequeños detalles que se nos hayan escapado cuando hemos trabajado con este conjunto de datos en una ocasión anterior. Concretamente, en el módulo 1, el primer conjunto de datos que aparecía (tabla 1.3) no cumplía con la definición de tidy data establecida por Wickham. Para profundizar en esta cuestión, volvemos a analizar estos datos en una versión más reducida, que se encuentra en la tabla 13.1 del lateral. Analicémosla detenidamente.
ioname | year | country | mem |
---|---|---|---|
ACPEU | 1990 | albania | 0 |
ACPEU | 1990 | algeria | 0 |
ACPEU | 1990 | andorra | NA |
ACPEU | 1990 | angola | 1 |
ACPEU | 1990 | antiguabarbuda | 1 |
ACPEU | 1990 | argentina | 0 |
Sabemos que este conjunto de datos cuantifica la pertenencia o no de los países a las organizaciones internacionales (OIs). Teniendo en cuenta esto, los países, situados en las columnas, no deberían ser considerados como un atributo de las OIs. En lugar de esto, los países deberían ser parte de la unidad de observación del conjunto de datos. Si cada unidad de observación representa la pertenencia de un país a una OI en un año específico (OI-país-año), esto implica que un conjunto de datos ordenado tendría el aspecto que ilustramos en la tabla 13.2. En esta tabla ordenada, la unidad de observación se encuentra claramente definida y es identificable en las tres primeras columnas. Y la cuarta variable, denominada mem
(que toma el valor 1 si el país es miembro de la IO en un año determinado, y 0 si no lo es), es una característica de la unidad de observación.
Reforzaremos conceptualmente la distinción entre datos ordenados y datos desordenados si examinamos el próximo ejemplo. La tabla 13.3 incluye tres conjuntos de datos (subtablas A, B y C) que contienen exactamente la misma información. No obstante, solo una de las tres tablas está ordenada.
- Es la más larga de las tres subtablas y está formada por seis filas y tres columnas:
name
,attributes
yvalues
. - Tiene tres filas y tres columnas:
name
,age
yeducation
. - Solo tiene dos filas y está formada por cuatro columnas:
characteristics
,Person 1
,Person 2
yPerson 2
.
name | attributes | values |
---|---|---|
Person 1 | age | 28 |
Person 1 | education | NA |
Person 2 | age | 44 |
Person 2 | education | Primary |
Person 3 | age | 32 |
Person 3 | education | Secondary |
name | age | education |
---|---|---|
Person 1 | 28 | NA |
Person 2 | 44 | Primary |
Person 3 | 32 | Secondary |
attributes | Person 1 | Person 2 | Person 3 |
---|---|---|---|
age | 28 | 44 | 32 |
education | NA | Primary | Secondary |
Tabla 13.3: Marco de datos con diferentes distribuciones de filas y columnas
El conjunto de datos B.
Para conocer los fundamentos de tidydata, podéis consultar el artículo académico Tidy Data (Wickham, 2014), publicado en el Journal of Statistical Software.
El segundo conjunto de datos es el único que se puede considerar ordenado. Las observaciones corresponden a las tres personas que estamos investigando, mientras que sus características o variables son el identificador del individuo (name
), su edad (age
) y su nivel de educación (education
).
13.2 ¿Por qué desordenados?
Los principios de tidy data pueden parecer tan evidentes que, equivocadamente, se puede pensar que los datos ordenados son extremadamente comunes. Sin embargo, la realidad es que los datos ordenados no son muy habituales. Esto se debe a varios motivos por los que los datos a menudo se conservan en estado desordenado:
- Muchas personas no están familiarizadas con los principios de tidy data. Por ejemplo, es habitual poner los años como valor en las columnas (2014, 2015, 2016…), aunque realmente no sean una variable, sino valores (ver la tabla 13.4 como ejemplo).
- Se pueden almacenar los datos desordenados por cuestiones de espacio. Por ejemplo, si descargáramos los datos de la Intergovernmental Organizations (v3), veríamos que es un conjunto de datos desordenado que tiene 16.139 filas y 235 columnas, que suman un total de 3.792.665 de valores. En cambio, si se ordenan los datos nos quedaría un conjunto de datos con 3.502.163 filas y 20 columnas, que sumaría 70.043.260 de valores. Almacenados en formato CSV, el archivo desordenado ocupará 10.3Mb y el archivo ordenado 566.3Mb.
- A la hora de crear una base de datos desde cero, puede resultar más eficiente para quien codifica los datos que la tabla se mantenga en un formato desordenado. Los datos siempre se pueden reordenar más adelante con un sencillo código de R.
- Para reproducir determinados gráficos, es necesario que algunas variables estén en una sola columna, hecho que obliga a desordenar los datos.
table1
13.3 Pivotar datos
Existen dos funciones del paquete tidyr que son esenciales en el proceso de ordenar datos: pivot_longer()
y pivot_wider()
. Estas funciones permiten pivotar los datos, que significa cambiar la manera como las observaciones y las variables están distribuidas en las filas y las columnas de un marco de datos, manteniendo la misma información. Principalmente, distinguiremos entre dos tipos de tablas desordenadas que necesitaremos pivotar:
-
Tabla ancha: Los datos están desordenados porque algunos nombres de columna no son variables, sino valores de una variable. Se pivota con
pivot_longer()
. -
Tabla larga: Los datos están desordenados porque algunas variables se han codificado como valores de una columna que no es ninguna variable. Se pivota con
pivot_wider()
.
Veamos, paso a paso, como son estas tablas y el código de R que se debe usar para pivotarlas.
13.3.1 Tabla ancha
Una tabla ancha es un conjunto de datos desordenado en que algunos nombres de columna no son variables, sino valores de una variable. El caso más frecuente es cuando los años aparecen como títulos de columna, como vemos en el objeto hdi2018l
, que se muestra en la tabla 13.4. Esta tabla contiene información sobre el Índice de Desarrollo Humano en varios países y años. La unidad de observación es país-año, pero el año no figura como observación, sino que cada nombre de columna corresponde a un año determinado.
iso3 | country_name | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 |
---|---|---|---|---|---|---|---|---|---|
AFG | Afghanistan | 0.463 | 0.471 | 0.482 | 0.487 | 0.491 | 0.493 | 0.494 | 0.498 |
ALB | Albania | 0.741 | 0.752 | 0.767 | 0.771 | 0.773 | 0.776 | 0.782 | 0.785 |
DZA | Algeria | 0.729 | 0.736 | 0.740 | 0.745 | 0.747 | 0.749 | 0.752 | 0.754 |
AND | Andorra | 0.828 | 0.827 | 0.849 | 0.850 | 0.853 | 0.854 | 0.856 | 0.858 |
AGO | Angola | 0.520 | 0.534 | 0.543 | 0.554 | 0.564 | 0.572 | 0.577 | 0.581 |
ATG | Antigua and Barbuda | 0.766 | 0.762 | 0.765 | 0.768 | 0.770 | 0.775 | 0.778 | 0.780 |
ARG | Argentina | 0.813 | 0.819 | 0.818 | 0.819 | 0.820 | 0.822 | 0.822 | 0.825 |
ARM | Armenia | 0.728 | 0.731 | 0.737 | 0.742 | 0.745 | 0.748 | 0.749 | 0.755 |
Una vez identificada la discrepancia en la unidad de observación, pivotar los datos es muy sencillo si se utiliza la función adecuada. Para ordenar una tabla ancha, lo que se hace es reconvertir los títulos de columna en valores de una variable, de forma que en la mayoría de los casos se acorta la anchura de la tabla (eliminando columnas) y se alarga su longitud (añadiendo filas). Como la tabla será más larga que ancha, intuitivamente, la función que necesitamos se llama pivot_longer()
, que consta de los siguientes argumentos:
pivot_longer(data, cols, names_to, values_to)
-
data
: el nombre del marco de datos. -
cols
: los nombres de columna que se convierten a valores de una variable. -
names_to
: el nombre que recibirá la columna contenedora de los nombres de columna reconvertidos. -
values_to
: el nombre que recibirá la columna que contenga el resto de valores.
Así, en el caso de hdi2018l
, se especificarán los argumentos de la siguiente manera:
hdi2018l |>
pivot_longer(cols = `2010`:`2017`, names_to = "year", values_to = "hdi")
## # A tibble: 1,512 × 4
## iso3 country_name year hdi
## <chr> <chr> <chr> <dbl>
## 1 AFG Afghanistan 2010 0.463
## 2 AFG Afghanistan 2011 0.471
## 3 AFG Afghanistan 2012 0.482
## 4 AFG Afghanistan 2013 0.487
## 5 AFG Afghanistan 2014 0.491
## 6 AFG Afghanistan 2015 0.493
## 7 AFG Afghanistan 2016 0.494
## 8 AFG Afghanistan 2017 0.498
## 9 ALB Albania 2010 0.741
## 10 ALB Albania 2011 0.752
## # ℹ 1,502 more rows
Fíjate que después de aplicar pivot_longer()
ahora la tabla está ordenada. La tabla ha aumentado el número de filas, de 189 a 1.512, y ha disminuido el número de columnas, de 10 a 4. Esta conversión ha hecho que la tabla tenga más valores, puesto que ha pasado de 1.890 (189x10) a 6.048 (1.512x4) valores.
13.3.2 Tablas largas
c_birth | geo | values |
---|---|---|
EU_OTH | BE1 | 191268 |
FOR | BE1 | 454453 |
NAT | BE1 | 654748 |
NEU | BE1 | 263185 |
OTH | BE1 | 27309 |
TOTAL | BE1 | 1136778 |
UNK | BE1 | 268 |
Una tabla larga es un conjunto de datos desordenado en el que algunas variables se han codificado como valores de una columna que no es ninguna variable. Es muy habitual encontrar tablas largas en archivos descargados de grandes bases de datos, como Eurostat o del Banco Mundial, por ejemplo. Para ilustrar este punto, se puede observar la tabla 13.5 del lateral, que muestra el resultado de descargar el indicador cens_11coba_r2
a través del paquete de R eurostat. El conjunto de datos resultante muestra la población de Bruselas (NUTS BE1) según el país de nacimiento de sus habitantes. Las variables del conjunto de datos están agrupadas en la columna c_birth
, mientras que sus valores se encuentran en la columna values
. Observamos, por ejemplo, que hay 654.748 ciudadanos nacionales (“NATO”) y 454.453 extranjeros (“FOR”) en Bruselas.
De manera similar, el objeto hdi2018w
, que se muestra en la tabla 13.6, contiene la columna indicator
con valores que en realidad son variables: “Carbon dioxide emissions, per capita (tonnes)” y “HIV prevalence, adult (% ages 15-49)”. Así mismo, en la columna data
se encuentran los valores de estas variables.
iso3 | country | indicator | year | data |
---|---|---|---|---|
AFG | Afghanistan | CO2 emissions, per capita | 2010 | 0.3 |
AFG | Afghanistan | CO2 emissions, per capita | 2011 | 0.4 |
AFG | Afghanistan | HIV prevalence, (% 15-49y) | 2010 | 0.1 |
AFG | Afghanistan | HIV prevalence, (% 15-49y) | 2011 | 0.1 |
ALB | Albania | CO2 emissions, per capita | 2010 | 1.6 |
ALB | Albania | CO2 emissions, per capita | 2011 | 1.8 |
ALB | Albania | Fossil fuel energy consumption (%) | 2010 | 63.2 |
ALB | Albania | Fossil fuel energy consumption (%) | 2011 | 61.5 |
De nuevo, si se sabe identificar la unidad de observación y las variables del marco de datos, pivotar los datos puede resultar relativamente sencillo1. En este caso, para desordenar los datos necesitamos hacer la tabla más ancha, porque tenemos que convertir valores de una columna en variables. Esto reducirá el número de filas y añadirá tantas columnas como valores tenga la columna que contiene las variables. Como estamos ensanchando la tabla, intuitivamente la función que necesitamos se llama pivot_wider()
, que consta de los siguientes argumentos:
1 Un truco para identificar las tablas desordenadas que necesitan ser ordenadas con pivot_wider()
es saber que acostumbran a tener columnas con el nombre de indicator
o value
.
pivot_wider(data, names_from, values_from)
-
data
: el nombre del marco de datos. -
names_from
: el título de la columna donde se encuentran los valores que se convertirán a variables. -
values_from
: el título de la columna donde se encuentran los valores que se convertirán en valores de las nuevas variables.
Así, en el caso de hdi2018w
, se especifican los argumentos de la siguiente manera:
hdi2018w |>
pivot_wider(names_from = indicator, values_from = data)
## # A tibble: 386 × 6
## iso3 country year `CO2 emissions, per capita` HIV prevalence, (% 15-4…¹
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 AFG Afghanistan 2010 0.3 0.1
## 2 AFG Afghanistan 2011 0.4 0.1
## 3 ALB Albania 2010 1.6 0.1
## 4 ALB Albania 2011 1.8 0.1
## 5 DZA Algeria 2010 3.3 0.1
## 6 DZA Algeria 2011 3.3 0.1
## 7 AND Andorra 2010 6.1 NA
## 8 AND Andorra 2011 5.9 NA
## 9 AGO Angola 2010 1.2 1.7
## 10 AGO Angola 2011 1.3 1.8
## # ℹ 376 more rows
## # ℹ abbreviated name: ¹`HIV prevalence, (% 15-49y)`
## # ℹ 1 more variable: `Fossil fuel energy consumption (%)` <dbl>
Se puede observar que utilizando pivot_wider()
la tabla ha quedado ordenada. Inicialmente, contenía 988 filas y 5 columnas, y ahora consta de 386 filas y 6 columnas. Esto implica una reducción en la longitud de la tabla (menos filas) y un aumento en la anchura, puesto que se han suprimido dos columnas, indicator
y data
, y se han añadido tres nuevas columnas que representan las diferentes categorías que antes estaban contenidas en la columna indicator
. Esta transformación ha generado dos efectos principales: se ha producido una reducción en el número total de valores, pasando de 4.940 a 2.316 valores2, y han aparecido datos perdidos. Fijémonos que en el conjunto de datos inicial no existía la observación de consumo de energía fósil en Afganistán. Pero con la tabla ordenada, estos datos perdidos aparecen, puesto que un conjunto de datos ordenado muestra todas las combinaciones posibles de observaciones y variables.
2 Los valores no necesariamente se reducen siempre que se pivota a tabla ancha así. Según la composición de los datos el número de valores puede aumentar
El paquete janitor (Firke, 2021) resulta muy útil para simplificar nombres de variables. La función clean_names()
elimina las mayúsculas de los títulos de variables y cambia los espacios por barras bajas. Puedes probar de utilizarla aplicando el código siguiente:
library(janitor)
hdi2018w |>
pivot_wider(names_from = indicator, values_from = data) |>
clean_names()
13.3.3 Tablas anchas y largas
Existe un tercer tipo de conjunto de datos desordenado, que es cuando se incumplen las dos condiciones de tabla ordenada: algunas observaciones se encuentran como títulos de columna y algunas variables se encuentran representadas como valores. El objeto hdi2018f
, que se reproduce a continuación, reúne estos dos requisitos. Los valores de la variable año se encuentran en las columnas mientras que los valores de la columna indicator
son realmente variables. Esto obliga a hacer una doble limpieza de los datos.
head(hdi2018f, 5)
## # A tibble: 5 × 34
## dimension indicator_id indicator_name iso3 country_name `1990` `1991` `1992`
## <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 Composite… 146206 HDI rank AFG Afghanistan NA NA NA
## 2 Composite… 146206 HDI rank ALB Albania NA NA NA
## 3 Composite… 146206 HDI rank DZA Algeria NA NA NA
## 4 Composite… 146206 HDI rank AND Andorra NA NA NA
## 5 Composite… 146206 HDI rank AGO Angola NA NA NA
## # ℹ 26 more variables: `1993` <dbl>, `1994` <dbl>, `1995` <dbl>, `1996` <dbl>,
## # `1997` <dbl>, `1998` <dbl>, `1999` <dbl>, `2000` <dbl>, `2001` <dbl>,
## # `2002` <dbl>, `2003` <dbl>, `2004` <dbl>, `2005` <dbl>, `2006` <dbl>,
## # `2007` <dbl>, `2008` <dbl>, `2009` <dbl>, `2010` <dbl>, `2011` <dbl>,
## # `2012` <dbl>, `2013` <dbl>, `2014` <dbl>, `2015` <dbl>, `2016` <dbl>,
## # `2017` <dbl>, `9999` <dbl>
El primer paso es alargar la tabla y pasar todas las columnas que tienen como título un año concreto a una variable que se llame year
mediante la función pivot_longer()
. Guardaremos los cambios en el objeto hdi2018f1
y lo reproduciremos. La tabla ahora es más larga, puesto que ha pasado de tener 25.636 filas y 34 columnas a tener 743.444 filas y 7 columnas.
hdi2018f1 <- hdi2018f |>
pivot_longer(`1990`:`9999`, names_to = "year", values_to = "value")
head(hdi2018f1)
## # A tibble: 6 × 7
## dimension indicator_id indicator_name iso3 country_name year value
## <chr> <dbl> <chr> <chr> <chr> <chr> <dbl>
## 1 Composite indices 146206 HDI rank AFG Afghanistan 1990 NA
## 2 Composite indices 146206 HDI rank AFG Afghanistan 1991 NA
## 3 Composite indices 146206 HDI rank AFG Afghanistan 1992 NA
## 4 Composite indices 146206 HDI rank AFG Afghanistan 1993 NA
## 5 Composite indices 146206 HDI rank AFG Afghanistan 1994 NA
## 6 Composite indices 146206 HDI rank AFG Afghanistan 1995 NA
El siguiente paso será ensanchar la tabla con la función pivot_wider()
. La columna indicator_name
contiene varios valores que son realmente variables. Y los valores de estas variables se encuentran en la columna value
. Si se aplica la transformación al objeto hdi2018f1
, el resultado que produce es una tabla ordenada, con 743.444 observaciones y 162 variables.
hdi2018f1 |>
pivot_wider(names_from = indicator_name, values_from = value)
## # A tibble: 743,444 × 162
## dimension indicator_id iso3 country_name year `HDI rank`
## <chr> <dbl> <chr> <chr> <chr> <dbl>
## 1 Composite indices 146206 AFG Afghanistan 1990 NA
## 2 Composite indices 146206 AFG Afghanistan 1991 NA
## 3 Composite indices 146206 AFG Afghanistan 1992 NA
## 4 Composite indices 146206 AFG Afghanistan 1993 NA
## 5 Composite indices 146206 AFG Afghanistan 1994 NA
## 6 Composite indices 146206 AFG Afghanistan 1995 NA
## 7 Composite indices 146206 AFG Afghanistan 1996 NA
## 8 Composite indices 146206 AFG Afghanistan 1997 NA
## 9 Composite indices 146206 AFG Afghanistan 1998 NA
## 10 Composite indices 146206 AFG Afghanistan 1999 NA
## # ℹ 743,434 more rows
## # ℹ 156 more variables: `Human Development Index (HDI)` <dbl>,
## # `Median age (years)` <dbl>,
## # `Old-age (65 and older) dependency ratio (per 100 people ages 15-64)` <dbl>,
## # `Population ages 15–64 (millions)` <dbl>,
## # `Population ages 65 and older (millions)` <dbl>,
## # `Population under age 5 (millions)` <dbl>, …
En el resultado, se pueden observar algunas cuestiones importantes. Primero, que la unidad de observación del conjunto de datos, país-año, se puede distinguir claramente en el formato ordenado. Segundo, que después de haber ordenado los datos, algunas columnas como indicator
(y probablemente también la columna dimension
) ya no tienen ninguna utilidad y, por lo tanto, se podrían eliminar. Y finalmente, que han aparecido muchos datos perdidos. Como ya se ha explicado, una tabla ordenada a menudo revela muchos NA
. Los que se observan en la tabla son normales, porque se tienen muy pocos datos de países como Afganistán en los años 90.
En algunas visualizaciones es habitual que primero se desordenen los datos. Esto es así porque en determinados gráficos algunas de sus proyecciones estéticas pueden estar formadas por varias variables. Por esta razón primero se deben situar todos los nombres de variable en una misma columna. Fijémonos, por ejemplo, en el código que se utiliza para generar la figura 13.1. Este gráfico compara las distribuciones de las variables gdpcap_nuts
y pop
en España, Italia y Francia. Para hacerlo, se ha creado un facet donde estas dos variables acaban constituyendo valores que separan horizontalmente el facet.
nuts |>
filter(country %in% c("Spain", "Italy", "France")) |>
select(country, name, gdpcap_nuts, pop) |>
pivot_longer(gdpcap_nuts:pop, names_to = "vars", values_to = "values") |>
ggplot(aes(x = values, fill = country)) +
geom_histogram(show.legend = F) +
facet_grid(rows = vars(country),
cols = vars(vars), scales = "free")
Hay múltiples maneras de eliminar las filas que contienen datos perdidos. Una opción es introducir una última línea de código que excluya los NA:
world_bank_pop |>
pivot_longer(`2000`:`2017`,
names_to = "any",
values_to = "valor") |>
pivot_wider(names_from = "indicator",
values_from = "valor")
13.4 Otras funciones
Otro supuesto en que un conjunto de datos incumple los criterios de Wickham es cuando los valores de una variable no se encuentran en una columna, sino en varias. O, al contrario, cuando los valores de dos o más variables no se encuentran separados uno en cada columna, sino en la misma columna. Para limpiar este tipo de anomalías existen las funciones separate()
y unite()
.
13.4.1 Separar
La función separate()
separa los valores de una columna en varias columnas. La función tiene la siguiente sintaxis:
separate(data, col, into, sep)
-
data
: el nombre del marco de datos. -
col
: el nombre de la columna que contiene los valores que se quiere separar. -
into
: el nombre de las columnas, en forma de vector de carácter, donde irán a parar los valores separados. -
sep
: el carácter o caracteres que hacen de separadores y que, por lo tanto, serán eliminados.
Para ver un ejemplo, el paquete tidyr contiene el marco de datos table3
, donde se observa que a la variable rate
el símbolo /
está separando dos valores. Si se consulta el libro de códigos, se puede ver como el primer valor responde al número de casos de tuberculosis y el segundo valor a la población total.
table3
## # A tibble: 6 × 3
## country year rate
## <chr> <dbl> <chr>
## 1 Afghanistan 1999 745/19987071
## 2 Afghanistan 2000 2666/20595360
## 3 Brazil 1999 37737/172006362
## 4 Brazil 2000 80488/174504898
## 5 China 1999 212258/1272915272
## 6 China 2000 213766/1280428583
Con separate()
se introduce el nombre del marco de datos como primer argumento, el nombre de la columna que se quiere separar (rate
) y, al argumento into
, los nombres en vector de carácter de las columnas con los datos separados. Como separador, indicaremos entre comillas "/"
dentro del argumento sep
3. Almacenamos los datos en el objeto t3
.
3 Utilizar el argumento sep
es, en muchas ocasiones, opcional. R interpretará de manera automática que el separador será un carácter no alfabético como un espacio, un guion, una barra baja, etc. y lo eliminará. En el supuesto de que el símbolo sea un punto (.
), se deberá indicar así: "\\."
.
t3 <- table3 |>
separate(rate, into = c("cases", "population"),
sep = "/")
t3
## # A tibble: 6 × 4
## country year cases population
## <chr> <dbl> <chr> <chr>
## 1 Afghanistan 1999 745 19987071
## 2 Afghanistan 2000 2666 20595360
## 3 Brazil 1999 37737 172006362
## 4 Brazil 2000 80488 174504898
## 5 China 1999 212258 1272915272
## 6 China 2000 213766 1280428583
13.4.2 Unir
La función unite()
une los valores de varias columnas en una sola columna. La función tiene la siguiente sintaxis:
unite(data, col, ..., sep)
-
data
: el nombre del marco de datos. -
col
: el nombre de la columna que contendrá los valores que se unirán. -
...
: el nombre de todas las columnas que se quiere unir. -
sep
: el carácter o caracteres que harán de separadores en la nueva columna.
Como ejemplo, se puede hacer la operación inversa al código anterior para unir las columnas cases
y population
del marco de datos t3
. En el argumento col
se indica que se quiere crear la columna "rate"
y en el siguiente argumento que se quiere unir las columnas cases
y population
. Finalmente, en el tercer argumento se indica el separador. En este caso, se ha marcado un guion "-"
4.
4 Por defecto, unite()
une los valores indicados con un guion bajo. Si se quiere que los datos estén unidos con otro símbolo, se debe indicar expresamente.
t3 |>
unite(col = "rate", cases:population, sep = "-")
## # A tibble: 6 × 3
## country year rate
## <chr> <dbl> <chr>
## 1 Afghanistan 1999 745-19987071
## 2 Afghanistan 2000 2666-20595360
## 3 Brazil 1999 37737-172006362
## 4 Brazil 2000 80488-174504898
## 5 China 1999 212258-1272915272
## 6 China 2000 213766-1280428583