## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Loading required package: tidyr
#### NOTA
#### en caso de que no hayas visto el %>% antes,
#### solo hace que el codigo se lea de izquierda a derecha
#### y no de adentro hacia afuera, es decir
#### algo %>% funcion1() %>% funcion2(argumento2) %>% funcion3
#### equivale a ...
#### funcion3(funcion2(funcion1(algo), argumento2))
###### reproducir el problema
# creamos el data frame para poder hacer el ejemplo
objetoInicial <- data_frame(
name = c("Sceloporus acanthinus", "Otro Nombre", "UnNombre Mas"),
longitude = c(-91.53613 , -93.47200 , -93.71400),
latitude = c(14.53438, 15.98500, 16.21800),
date = c(2005-06-23, 2003-03-20, 2003-03-05),
key = c(208042516, 371129066, 371128583),
coloresMalAlineados = c("darkorchid3", "darkorchid3", "black")
)
objetoInicial <- objetoInicial %>% sample_frac(3, replace = TRUE)
# Y asi es como se debe ver tu data frame (mas o menos ...)
objetoInicial
## # A tibble: 9 × 6
## name longitude latitude date key
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 2 UnNombre Mas -93.71400 16.21800 1995 371128583
## 3 Otro Nombre -93.47200 15.98500 1980 371129066
## 4 Otro Nombre -93.47200 15.98500 1980 371129066
## 5 Otro Nombre -93.47200 15.98500 1980 371129066
## 6 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 7 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 8 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 9 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## # ... with 1 more variables: coloresMalAlineados <chr>
# creamos la lista de colores (tecnicamente vector ..)
colores <-c('red', 'yellow', 'brown',
'navy', 'black', 'darkorange',
'gray','darkolivegreen1', 'deeppink1',
'forestgreen','violet', 'darkgoldenrod1',
'darkorchid3', 'sienna2', 'tan1',
'gray96')
###### SOLUCION
# Y AHORA creamos un data frame de referencia para agregar los colores
frameDeColores <- objetoInicial %>%
select(name) %>% # extraemos solo la columna de nombres
unique() %>% # retiramos los repetidos
mutate(color = sample(colores,
size = n() # numero de elementos
)
)
# lo que nos da un data frame asi ...
# solo nombres y colores, nombres no repetidos, colores no repetidos
frameDeColores
## # A tibble: 3 × 2
## name color
## <chr> <chr>
## 1 Sceloporus acanthinus yellow
## 2 UnNombre Mas violet
## 3 Otro Nombre brown
# y despues solo hacemos la union de los datos con left_join (dplyr)
objetofinal <- left_join(objetoInicial,
frameDeColores,
by = "name")
objetofinal
## # A tibble: 9 × 7
## name longitude latitude date key
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 2 UnNombre Mas -93.71400 16.21800 1995 371128583
## 3 Otro Nombre -93.47200 15.98500 1980 371129066
## 4 Otro Nombre -93.47200 15.98500 1980 371129066
## 5 Otro Nombre -93.47200 15.98500 1980 371129066
## 6 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 7 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 8 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## 9 Sceloporus acanthinus -91.53613 14.53438 1976 208042516
## # ... with 2 more variables: coloresMalAlineados <chr>, color <chr>