[1] 7.78
tidyverse
tidyverse
’ para ordenar datosSi queremos hacer varias operaciones en secuencia:
Código anidado (los resultados se evalúan de adentro hacia afuera)
Objetos intermedios (creamos objetos con resultados intermedios y para la siguiente función en la secuencia)
Pipes (estructuramos operaciones seriadas de izquierda a derecha)
Mano izquiera
(LHS)
operador ‘pipe’
%>%
de 📦 magrittr
|>
en R v >= 4.1.0
Mano derecha
(RHS)
Toma un objeto a la izquerda del operador y lo inserta como argumento en la función que esté a su derecha
* Por defecto lo que esté a la izquierda del ‘pipe’ se inserta como el primer argumento de la función
Reducen la necesidad de guardar resultados intermedios o de anidar código
Código más fácil de leer
Más fácil quitar o agregar pasos a la secuencia
Insertamos con
ctrl + shift + M
Adolfo Álvarez (2021)
The (updated) history of the pipe operator in R
LHS |> RHS(argument = 12)
se convierte en
RHS(LHS, argument = 12)
… una colección de paquetes de R diseñados para ciencia de datos. Todos los paquetes comparten una filosofía de diseño, gramática, y estructuras de datos. Su objetivo principal es de ‘facilitar una conversación sobre datos entre un humano y su computador’
Wickham et al. (2019)
Welcome to the tidyverse
https://www.tidyverse.org/
Para tareas comunes con datos: importar archivos, limpiar datos, transformar, visualizar, o programar nuevas funciones.
Diseñado para facilitar su aprendizaje y que los usuarios vayan aprendiendo más funciones conforme interactuen con más elementos de este ‘ecosistema’.
Çetinkaya-Rundel et al. (2021)
An educator’s perspective of the tidyverse
Modernizando el data.frame
Implementado para todo el tidyverse
a través de 📦 tibble
Objeto rectangular común para todos los paquetes del tidyverse
tidyverse
reciben un data.frame
➡️ regresan un data.frame
reciben un tibble
➡️ regresan un tibble
generan un objeto nuevo ➡️ crean un tibble
Salida predeterminada de funciones
Convirtiendo otros objetos con as_tibble()
Construyendo a partir de vectores con tibble()
Para menos ambigüedad:
No asignan nombres a las filas
No modifican los nombres de las columnas
No convierten caracteres en factores
Exigen nombres completos para seleccionar subconjuntos de variables con $
Para no saturar la consola, los métodos de impresión para tibbles muestran:
Las primeras 10 filas
Cuántas filas y columnas no se imprimieron
Solo las columnas que entran en el ancho de nuestra pantalla
El tipo de variable de todas las columnas
Nombre | Periodo | TipoViaje | PropositoViaje | Costo | Pais |
---|---|---|---|---|---|
Miguel J. | 2022 | Nacional | Salida campo | 1000 | MX |
Miguel J. | 2022 | Nacional | Salida campo | 1000 | MX |
Miguel J. | 2022 | Nacional | Congreso | 500 | MX |
Miguel J. | 2022 | Nacional | Taller | 500 | MX |
Miguel J. | 2022 | Internacional | Congreso | 2000 | EUA |
Alejandra M. | 2022 | NA | NA | NA | NA |
Raul S. | 2022 | Nacional | Salida campo | 1000 | MX |
Más fácil de importar y manipular
Menos potencial de errores no replicables (alteraciones, omisiones, duplicaciones)
Siguiendo buenos principios de organización producimos mejores datos y podremos identificar y resolver problemas en datos existentes
Unidades, nombres, esquemas, fechas etc. consistentes
Nombres utilizables
Estructuras rectangulares
Openscapes (2020)
Tidy data illustrated
Broman and Woo (2018)
Organizing data in spreadsheets
Verde Arregoita et al. (2018)
Good practices for sharing analysis-ready data…
Tablas relacionadas con datos sobre seguimiento GPS de aves
id | ave | edad | estado |
---|---|---|---|
23 | gorrión | juvenil | VER |
11 | buho | adulto | Veracruz |
7 | buho | j | Puebla |
40 | codorniz | ADULTO | PU |
34 | gorrión | 1 | VER |
30 | paloma | A | V |
ID_ave | num_rasteador | sexo |
---|---|---|
23 | b452 | M |
11 | b256 | M |
7 | a122 | F |
40 | b889 | M |
34 | d136 | F |
¿Cuántas inconsistencias ven aquí?
Objetos con filas y columnas, en los cuales:
Cada fila tiene el mismo número de columnas
Cada columna tiene el mismo número de filas
Vectores o factores de la misma longitud entonces todas las columnas tienen la misma ‘altura’
Davis Vaughan (2018)
Tidying Excel cash flow spreadsheets
but sometimes such data is “rectangular” in the same sense that this cat is “bowl-shaped” 😂 pic.twitter.com/ZmxvgcV57d
— Jenny Bryan (@JennyBryan) May 9, 2019
animal | ind_observados | habitat |
---|---|---|
caracol | 12 | mar |
gaviota | 14 | costa |
nutria | 11 | río |
caracol | gaviota | nutria |
---|---|---|
12 | 14 | 11 |
mar | costa | río |
Una reinterpretación accesible de distintos principios y definiciones de estadística y ciencias de la computación
Wickham (2014)
Tidy Data - Journal of Statistical Software
Datos acomodados en una matriz 2D con filas y columnas
Las filas corresponden a observaciones
Las columnas corresponden a variables
Un solo valor por celda
Más fácil de reacomodar y manejar
Los valores de cada observación quedan juntos
Las variables entran directemente como especificaciones para modelos y/o parámetros gráficos
Usar ‘variables indicadoras’ en lugar de colapsar información entre dos o más variables.
Equipo | Liga | Victorias | Clasificado |
---|---|---|---|
Osos | Primera | 8 | SI |
Venados | Reservas | 2 | NO |
Dragones | Primera | 12 | SI |
Leones | Primera | 4 | NO |
Fénix FC | Reservas | 7 | SI |
No se registraron, no aplican, se perdieron, etc.
Los datos faltantes siguen siendo datos
En R usamos NA, una constante especial que indica valores faltantes
Tratar los valores NA consistentemente
Evitar ambigüedad
¿Falta un valor, se dejó una celda en blanco intencionalmente, o la medición no aplica?
No usar celdas vacías como relleno para alinear datos o con fines estéticos-estructurales
Evitar valores NA
en nombres de variables
Nombres poco informativos e inconsistentes
X | x1 | X2 | calif_min | CALIFICACION.PROMEDIO |
---|---|---|---|---|
UANL | Norte | Arquitectura | 6 | 8.90 |
UT | Norte | Diseño | 7 | 7.78 |
UABJO | Sur | Diseño | 6 | 8.50 |
Más díficil de recordar para hacer referencia a diferentes variables
No se ordenan bien (alfanuméricamente)
universidad | region | area | calificacion_minima | calificacion_promedio |
---|---|---|---|---|
UANL | Norte | Arquitectura | 6 | 8.90 |
UT | Norte | Diseño | 7 | 7.78 |
UABJO | Sur | Diseño | 6 | 8.50 |
universidad | region | area | calificacion_ | calificacion |
---|---|---|---|---|
NA | NA | NA | minima | promedio |
UANL | Norte | Arquitectura | 6 | 8.9 |
UT | Norte | Diseño | 7 | 7.78 |
UABJO | Sur | Diseño | 6 | 8.5 |
Los nombres de las columnas aparecen en >1 fila
Mezcla de fragmentos de nombre con datos
Se pierden los separadores entre palabras
Se introducen NA
::: :::
Fáciles de interpretar (por humanos y por máquinas) y listos para analizar
↘ Reduce la dependencia a software complejo o caro y disminuye la necesidad de saber programar para limpiar datos complejos
↘ Reducir la interpretación que habrá que hacer para poder usar los datos
Mientras más simple mejor (ej: texto delimitado - csv, tsv, etc.)
Compartir datos, guardar cálculos y resultados por separado
📦 dplyr
📦 tidyr
Flexibles, pero desarrollados en torno a una filosofía común
dplyr
Funciones separadas para las operaciones más comunes
Cada función solo hace una cosa pero la hace bien
Funciones intuitivas para:
Crear subconjuntos de filas y columnas
Crear o modificar columnas
pais | especies | amenazadas | region |
---|---|---|---|
Indonesia | 670 | 191 | Asia |
Brasil | 648 | 80 | America |
China | 551 | 73 | Asia |
Mexico | 523 | 96 | America |
Peru | 467 | 53 | America |
Congo | 430 | 15 | Africa |
India | 412 | 93 | Asia |
Kenya | 376 | 30 | Africa |
Argentina | 374 | 38 | America |
Ecuador | 372 | 47 | America |
Venezuela | 363 | 35 | America |
Tanzania | 359 | 41 | Africa |
paises_m <-
tibble::tribble(
~pais, ~especies, ~amenazadas, ~region,
"Indonesia", 670L, 191L, "Asia",
"Brasil", 648L, 80L, "America",
"China", 551L, 73L, "Asia",
"Mexico", 523L, 96L, "America",
"Peru", 467L, 53L, "America",
"Congo", 430L, 15L, "Africa",
"India", 412L, 93L, "Asia",
"Kenya", 376L, 30L, "Africa",
"Argentina", 374L, 38L, "America",
"Ecuador", 372L, 47L, "America",
"Venezuela", 363L, 35L, "America",
"Tanzania", 359L, 41L, "Africa"
)
select()
mutate()
Podemos contrar en dónde aparece la nueva columna con los argumentos .before
y .after
filter()
Retiene solamente las filas que cumplen una condición
rename()
Nombre nuevo primero luego variable objetivo
data()
carga o genera una lista de juegos de datos disponibles con los paquetes que tengamos instalados
data()
sin ningún argumento muestra todos los datos disponibles
Podemos especificar de cuál paquete enlistar datos
data(package="ggplot2")
data(package="datasets")
data(package="tidyr")
data()
carga datos desde un paquete, como argumento usamos el nombre del juego de datos que necesitamos (con o sin comillas)
Debe estar cargado el paquete que contiene los datos
Cargar el objeto pinguinos
, se instala con el paquete datos
Crear un subconjunto de datos que solo incluya especie
, isla
, y largo_aleta_mm
¿Cuántos individuos tienen aletas > a 195 mm?
Crea una nueva columna con el largo de aleta en pulgadas
across()
across()
Para aplicar filter
o mutate
a varias columnas
Columnas especificadas por posición (no es buena opción), nombre, o tipo
Selecciones compuestas
(ej: variables de tipo factor que contienen ‘temp’ en su nombre)
across()
:.cols Columnas para transformar
.fns Función a aplicarse a cada una
across
espera una función entonces el nombre y sus argumentos se pueden pasar por separado
# A tibble: 3 × 4
pais especies amenazadas region
<chr> <dbl> <dbl> <chr>
1 Indonesia 1340 382 Asia
2 Brasil 1296 160 America
3 China 1102 146 Asia
.cols
es un vector con los nombres de las dos columnas que nos interesan
*
es la función para aplicar, 2
es su argumento
Existen funciones auxiliares para especificar conjuntos de varaibles, se usan junto con o en lugar de across()
everything()
Todas las variables
!
Devuelve el complemento de un conjunto de variables
where()
Selecciona las variables para las cuales alguna comparación regrese TRUE
ej: transformar todas las variables de tipo numérico, identificadas con
is.numeric()
matches()
Encuentra nombres de variables con expresiones regulares
ej: quitar variables que contengan “prec”
:
Selecciona variables contiguas
-
Excluir variables
(devuleve todos los elementos excepto el que sigue el operador de resta)
across
sin funciones auxiliaresRaíz cuadarada (sqrt()
) de especies
y amenazadas
sqrt()
) de todas las variables numéricasDejar solo variables numéricas
Lectura y captura más fácil
Útil para edición interactiva en hojas de cálculo
Tiende a seguir principios de Datos Ordenados
Listos para analizar
Se vinculan directamente con parámetros estéticos en un gráfico
tidyr
ancho a largo: pivot_longer()
largo a ancho: pivot_wider()
Asentamiento | Tipo | CP | Abarrotes | Supermercado | Minisuper |
---|---|---|---|---|---|
Arroyo Blanco | Colonia | 91025 | 7 | 2 | 1 |
Atenas | Fraccionamiento | 91184 | 1 | 0 | 2 |
Colibris | Colonia | 91067 | 8 | 3 | 2 |
Del Valle | Unidad Habitacional | 91097 | 2 | 1 | 1 |
El Cafetal | Fraccionamiento | 91150 | 2 | 0 | 0 |
colonias <-
tibble::tribble(
~Asentamiento, ~Tipo, ~CP, ~Abarrotes, ~Supermercado, ~Minisuper,
"Arroyo Blanco", "Colonia", 91025L, 7L, 2L, 1L,
"Atenas", "Fraccionamiento", 91184L, 1L, 0L, 2L,
"Colibris", "Colonia", 91067L, 8L, 3L, 2L,
"Del Valle", "Unidad Habitacional", 91097L, 2L, 1L, 1L,
"El Cafetal", "Fraccionamiento", 91150L, 2L, 0L, 0L
)
Variables:
colonia, tipo de asentamiento, Código Postal, Número de negocios
cols
Las columnas cuyos nombres son datos
names_to
Nombre para la nueva varible que se crea a partir de los nombres de cada cols
values_to
Nombre para la variable que se crea a partir de los contenidos de cada columna especificada con cols
colonias %>%
pivot_longer(
cols = c(Abarrotes,Supermercado,Minisuper),
names_to = "tipo_negocio",
values_to = "n_negocios")
# A tibble: 15 × 5
Asentamiento Tipo CP tipo_negocio n_negocios
<chr> <chr> <int> <chr> <int>
1 Arroyo Blanco Colonia 91025 Abarrotes 7
2 Arroyo Blanco Colonia 91025 Supermercado 2
3 Arroyo Blanco Colonia 91025 Minisuper 1
4 Atenas Fraccionamiento 91184 Abarrotes 1
5 Atenas Fraccionamiento 91184 Supermercado 0
6 Atenas Fraccionamiento 91184 Minisuper 2
7 Colibris Colonia 91067 Abarrotes 8
8 Colibris Colonia 91067 Supermercado 3
9 Colibris Colonia 91067 Minisuper 2
10 Del Valle Unidad Habitacional 91097 Abarrotes 2
11 Del Valle Unidad Habitacional 91097 Supermercado 1
12 Del Valle Unidad Habitacional 91097 Minisuper 1
13 El Cafetal Fraccionamiento 91150 Abarrotes 2
14 El Cafetal Fraccionamiento 91150 Supermercado 0
15 El Cafetal Fraccionamiento 91150 Minisuper 0
names_from
De cuáles columnas vamos a tomar valores para los nombres de las nuevas variables
values_from
Cuál columna tiene los valores de celda para las nuevas variables creadas
# A tibble: 5 × 6
Asentamiento Tipo CP Abarrotes Supermercado Minisuper
<chr> <chr> <int> <int> <int> <int>
1 Arroyo Blanco Colonia 91025 7 2 1
2 Atenas Fraccionamiento 91184 1 0 2
3 Colibris Colonia 91067 8 3 2
4 Del Valle Unidad Habitacional 91097 2 1 1
5 El Cafetal Fraccionamiento 91150 2 0 0
Carga el archivo “expresion_genes.csv
”. Esta tabla contiene valores de expresión génica para cinco especies de peces, a partir de muestras tomadas en seis tiempos y de dos tejidos.
Transforma los datos de ancho a largo y de regreso a ancho.
coalesce()
- Combina valores. A partir de dos o más vectores, retiene valores en orden y rellena datos faltantes con valores de los siguientes vectores.
fill()
Rellena valores adyacentes. Ayuda a evitar datos faltantes innecesarios. Similar a las funciones para rellenar valores contiguos en hojas de cálculo.
dplyr::coalesce()
NA
en cada posición para un conjunto de vectores* las columnas en datos rectangulares son vectores
NA
que aparezcan primero.Vectores numéricos del mismo largo, hay valores faltantes.
El orden de los argumentos importa
muestra | sensor_1 | sensor_respaldo | literatura |
---|---|---|---|
ladera sur | NA | 4.9 | 2.6 |
ladera norte | 2.2 | NA | 4.3 |
urbano | 4.5 | 5.0 | 3.4 |
invernadero A | NA | 2.7 | 3.5 |
invernadero B | 2.5 | NA | 2.3 |
# A tibble: 5 × 5
muestra sensor_1 sensor_respaldo literatura val_completo
<chr> <dbl> <dbl> <dbl> <dbl>
1 ladera sur NA 4.9 2.6 4.9
2 ladera norte 2.2 NA 4.3 2.2
3 urbano 4.5 5 3.4 4.5
4 invernadero A NA 2.7 3.5 2.7
5 invernadero B 2.5 NA 2.3 2.5
tidyr::fill()
mamiferos | biomasa |
---|---|
ganado | 21 |
NA | 5 |
NA | 7 |
NA | 23 |
NA | 74 |
silvestre | 23 |
NA | 65 |
NA | 12 |
NA | 5 |
Rellena valores faltantes en una columna (por defecto de arriba a abajo)
Se asume que los valores contiguos son los mismos hasta que aparece otro distinto en la misma columna
Rellena hasta el siguiente valor que no sea NA
Conocidas como regex, R.E., E.R., o regexp (singular)
Lenguaje conciso para describir patrones de texto
En la práctica, un lenguaje de programación con su propia sintaxis y terminología
entrada: una cadena de texto que se compila en un mini programa construido específicamente para identificar un patrón
Pueden usarse para empatar, buscar, reemplazar, o partir texto
Un conjunto de caracteres que componen un elemento de un vector:
Podemos almacenar varias cadenas en un vector de texto:
Los nombres de variables, objetos, y los valores en un data frame también pueden ser cadenas de texto:
bebida | precio |
---|---|
café | 3.50 |
té | 2.99 |
jugo | 3.20 |
La misma letra en mayúscula y mínuscula se trata como un caracter diferente
Podemos:
Ahorrar tiempo al buscar patrones, transformar texto, describir patrones, extraer partes de palabras, etc.
Una sola expresión regular puede reemplazar decenas de líneas de código
Sirven en prácticamente cualquier lenguaje de programación o aplicación de línea de comandos
gato
“Ese gato feo”
Ese gato feo
La expresión regular para encontrar una secuencia fija de caracteres es esa misma secuencia
busca una g seguida de una a luego t y o (todos estos caracteres juntos y en ese orden de izq. a der.)
¿Está funcionando mi expresión?
Abrir rubular, regex101, regexr, o regexpal
Probemos el primer ejemplo gato y “ese gato feo”
Tanto las cadenas de texto como las expresiones regulares se componen por caracteres
Podemos agrupar a los caracteres dependiendo de su comportamiento
Si la entrada es “pato” y la E.R. es pato
Habrá coincidencia cuando los caracteres p, a, t y o aparezcan consecutivamente en el texto de entrada
p, a, t y o serían ejemplos de caracteres literales
Se encuentran a sí mismos
El poder y la flexibilidad de las expresiones regulares viene de su capacidad de describir patrones complejos
Si un patron de texto se puede describir verbalmente, seguramente se puede codificar en una expresión regular
“rata” pero no “bata”
“pollo” pero solo si el esta secuencia está al principio de la cadena de texto
números (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Variantes ortográficas “Brasil” o “Brazil”
Palabras con terminaciones específicas (DAE, NAE, etc.)
Fechas
Correos electrónicos
Códigos postales
Números entre paréntesis
Usuarios de Twitter (comienzan con @, sin espacios ni símbolos, <16 caracteres)
Palabras en MAYÚSCULA
Un pequeño subconjunto de caracteres nos ayudan a describir patrones más complejos porque tienen comportamientos especiales y no se buscan solo a sí mismos.
Cuando aparecen en una E.R., se interpretan de una manera especial.
Incluyen: []^$.|?*+(), que están apartados para fines especiales
Para empatar caracteres desconocidos
.
empata cualquier caracter una vez
m..l empata “miel” pero no “miguel”
Empatan uno o más caracteres especificados con corchetes
[ ]
para buscar conjuntos de caracteres
[mr]ata empata “mata”, y “rata”, pero no “bata”
[^] excluye conjuntos de caracteres
^
va al principio del conjunto
[^aoeiou] solo empata consonantes
[^R] todo excepto R mayúscula
Indican una serie de caracteres contiguos dentro de un conjunto de caracteres
El guión - dentro de un conjunto de caracteres sirve para abreviar secuencias alfabéticas o numéricas
[A-D] cualquier letra mayúscula entre A y D
[5-8] cualquier dígito entre 5 y 8
[A-Za-z] cualquier letra
Especifican la posición relativa del patrón que estamos buscando
^ comienza con
$ termina con
^mil empata “militar” pero no “familia”
ing$ empata “Boing” pero no “ingeniero”
¿Cómo podemos empatar mano, milo, malo, y mito?
¿Cómo podemos empatar Cristian, Kristian, y Crystian usando conjuntos de caracteres?
mila
al principio de una cadena de texto?Indican el número de caracteres o expresiones que deben coincidir
? Cero o una
* Cero o más
+ Una o más
{} n veces
los cuantificadores aplican al caracter que tienen a su izquierda
Isabell?a coincide con “Isabella” y con “Isabela”
0 o 1
go*l! coincide con: “gl!”, “gol!”, “gooool!”, “goooooooool!”, etc.
0 o más
no+ empata “no”, “nooo”, “noooooo”, etc, pero no “n”
una o más
a{2} empata “portaaviones” pero no “portaviones”
n veces
Empatar mira, miiiiiiiiiira, y miiira
Empatar Computador, computadora, computador, y Computadora (usar juegos de caracteres y cuantificadores)
Separa alternativas de búsqueda
| una u otra opción
Bra(s|z)il ecuentra Brasil y Brazil.
las dos alternativas van entre paréntesis
\ indica una construcción especial abreviada o sirve para poder usar caracteres especiales como literales
qué\\? para poder buscar el signo de interrogación literalmente
en R la diagonal también se tiene que escapar
Los metacaracteres dentro de conjuntos de caracteres se vuelven literales
Para abreviar conjuntos de caracteres
\w letras, guión bajo, y números
\d dígitos
\ttabulación
\n saltos de línea
\s espacio
\b límite de palabra
\b
Marca la posición en la que un caracter de palabra (letras, números, guión bajo) no va seguido o precedido por otro caracter de palabra (espacios o el inicio o fin de la cadena)
El límite de una palabra encontrada no se incluye en el resultado
Antes de
\bmila encuentra “la milanesa” pero no “Camila”
Después de
arte\b encuentra “saludarte hoy” pero no “artesanal”
Expliquemos qué pasa cuando usamos estas tres E.R.
^can.* empata “can”, “canino”, “canasta”, y “canadiense”
A.*n cualquier cadena de texto que empiece con “A” y termine con “n”
^[a-z]+$ solo min núsculas
\w+\b$ la última palabra en una cadena
“12 de marzo”
“Liomys pictus”
^\w+\b primera palabra “12 de marzo”
“Liomys pictus”
Empatemos:
Podemos crear subconjuntos de filas y columnas mediante coincidencias entre expresiones regulares y nombres de variables o con sus valores
stringr
Funciones para manipular cadenas de texto
Los nombres de las funciones tienen el prefijo str_
El primer argumento de sus funciones es la cadena de texto de interés
Función regex()
para modificar el comportamiento de búsqueda
ignore_case=TRUE
para dejar de distinguir entre mayúsculas y minúsculas
stringr
- ejemplos¿Coincidencias?
Regresa un vector V/F de la misma longitud que la entrada
stringr
- ejemplos[1] TRUE TRUE FALSE
stringr
- más ejemplos¿Cuáles elementos coinciden?
Regresa el índice de los elemenots con coincidencias
stringr
- más ejemplos[1] 1 2
stringr
- reemplazar coincidenciasstringr
- función regex()
Sin distinción entre MAYUSCULAS y minúsculas
stringr
Probemos estas expresiones contra este vector usando str_detect
. Explicar las coincidencias.
E. regulares
Elegir/descartar filas y columnas
Reemplazar o modificar valores
Extraer o borrar partes de cadenas de texto
dplyr
La función auxiliar matches()
acepta expresiones regulares para seleccionar variables que contengan coincidencias
Datos de pingüinos pinguinos
de 📦 datos
Datos de paises del paquete 📦 datos
Paises con “z” en su nombre
Inflán datos
Costos de repetición no intencional
Resultados imprecisos
Identificar con get_dupes()
del paquete 📦 janitor
Eliminar con distinct()
de 📦 dplyr
En todas las variables (copias idénticas de una fila)
En las variables que definen nuestras unidades observacionales
En conjuntos arbitrarios de variables
IDusuario | Direccion | Colonia | Alcaldia |
---|---|---|---|
Pablitoo | Cafetal 395 Casa 2 | San Angel | A. Obregón |
susana24 | Fresnos 114 | San Angel | A. Obregón |
susana24 | Fresnos 114 | San Angel | A. Obregón |
jd.adriana | Cafetal 395 Casa 8 | San Angel | A. Obregón |
JuanManuel | Hidalgo 11 Depto 1B | Campestre | A. Obregón |
JoaquinED | Hidalgo 11 Depto 1B | Campestre | A. Obregón |
e_ric2 | Hidalgo 11 Depto 1B | Campestre | A. Obregón |
ordenes_pizza <-
tibble::tribble(
~IDusuario, ~Direccion, ~Colonia, ~Alcaldia,
"Pablitoo", "Cafetal 395 Casa 2", "San Angel", "A. Obregón",
"susana24", "Fresnos 114", "San Angel", "A. Obregón",
"susana24", "Fresnos 114", "San Angel", "A. Obregón",
"jd.adriana", "Cafetal 395 Casa 8", "San Angel", "A. Obregón",
"JuanManuel", "Hidalgo 11 Depto 1B", "Campestre", "A. Obregón",
"JoaquinED", "Hidalgo 11 Depto 1B", "Campestre", "A. Obregón",
"e_ric2", "Hidalgo 11 Depto 1B", "Campestre", "A. Obregón"
)
get_dupes()
# A tibble: 2 × 5
IDusuario Direccion Colonia Alcaldia dupe_count
<chr> <chr> <chr> <chr> <int>
1 susana24 Fresnos 114 San Angel A. Obregón 2
2 susana24 Fresnos 114 San Angel A. Obregón 2
Añade una variable dupe_count
que cuantifica las filas con valores duplicados
Acomoda las variables de interés al principio del data frame resultante
get_dupes()
asignando una variable para definir nuestra unidad observacional
¿Alguien ordenó más de una vez?
get_dupes()
con combinaciones de variables
accepta funciones auxiliares de 📦
tidyselect
# A tibble: 5 × 5
Direccion Colonia dupe_count IDusuario Alcaldia
<chr> <chr> <int> <chr> <chr>
1 Hidalgo 11 Depto 1B Campestre 3 JuanManuel A. Obregón
2 Hidalgo 11 Depto 1B Campestre 3 JoaquinED A. Obregón
3 Hidalgo 11 Depto 1B Campestre 3 e_ric2 A. Obregón
4 Fresnos 114 San Angel 2 susana24 A. Obregón
5 Fresnos 114 San Angel 2 susana24 A. Obregón
Descartar con distinct()
de 📦 dplyr
# A tibble: 6 × 4
IDusuario Direccion Colonia Alcaldia
<chr> <chr> <chr> <chr>
1 Pablitoo Cafetal 395 Casa 2 San Angel A. Obregón
2 susana24 Fresnos 114 San Angel A. Obregón
3 jd.adriana Cafetal 395 Casa 8 San Angel A. Obregón
4 JuanManuel Hidalgo 11 Depto 1B Campestre A. Obregón
5 JoaquinED Hidalgo 11 Depto 1B Campestre A. Obregón
6 e_ric2 Hidalgo 11 Depto 1B Campestre A. Obregón
distinct()
con la variables que definen las unidades observacionales
# A tibble: 6 × 4
IDusuario Direccion Colonia Alcaldia
<chr> <chr> <chr> <chr>
1 Pablitoo Cafetal 395 Casa 2 San Angel A. Obregón
2 susana24 Fresnos 114 San Angel A. Obregón
3 jd.adriana Cafetal 395 Casa 8 San Angel A. Obregón
4 JuanManuel Hidalgo 11 Depto 1B Campestre A. Obregón
5 JoaquinED Hidalgo 11 Depto 1B Campestre A. Obregón
6 e_ric2 Hidalgo 11 Depto 1B Campestre A. Obregón
.keep_all
para retener o no las demás columnas
distinct()
con combinaciones de variables
⚠️ Si
.keep_all = TRUE
y hay valores duplicados en otras variables,distinct
solo retiene la primera fila
# A tibble: 4 × 4
IDusuario Direccion Colonia Alcaldia
<chr> <chr> <chr> <chr>
1 Pablitoo Cafetal 395 Casa 2 San Angel A. Obregón
2 susana24 Fresnos 114 San Angel A. Obregón
3 jd.adriana Cafetal 395 Casa 8 San Angel A. Obregón
4 JuanManuel Hidalgo 11 Depto 1B Campestre A. Obregón
Cargar el archivo murcielagos.csv
¿De cuántas localidades únicas provienen estos registros?
Exportar un archivo con las localidades únicas y nombres de columna en español