Te traemos el arreglo a esta dificultad, al menos eso esperamos. Si presentas dudas puedes dejar un comentario, que sin dudarlo te ayudaremos
Solución:
dplyr
tiene un group_indices
función para crear ID de grupo únicos
library(dplyr)
data <- data.frame(personal_id = c("111-111-111", "999-999-999", "222-222-222", "111-111-111"),
gender = c("M", "F", "M", "M"),
temperature = c(99.6, 98.2, 97.8, 95.5))
data$group_id <- data %>% group_indices(personal_id)
data <- data %>% select(-personal_id)
data
gender temperature group_id
1 M 99.6 1
2 F 98.2 3
3 M 97.8 2
4 M 95.5 1
O dentro de la misma canalización (https://github.com/tidyverse/dplyr/issues/2160):
data %>%
mutate(group_id = group_indices(., personal_id))
dplyr::group_indices()
está en desuso a partir de dplyr 1.0.0
. dplyr::cur_group_id()
debe usarse en su lugar:
df %>%
group_by(personal_id) %>%
mutate(group_id = cur_group_id())
personal_id gender temperature group_id
1 111-11-1111 M 99.6 1
2 999-999-999 F 98.2 3
3 111-11-1111 M 97.8 1
4 999-999-999 F 98.3 3
5 888-88-8888 F 99 2
6 111-11-1111 M 98.9 1
Usando el paquete dplyr:
library(dplyr)
data <- data.frame(personal_id = c("111-111-111", "999-999-999", "222-222-222", "111-111-111"),
gender = c("M", "F", "M", "M"),
temperature = c(99.6, 98.2, 97.8, 95.5))
primero extrae el personal_id para crear una identificación única:
cases <- data.frame(levels = levels(data$personal_id))
usando nombres de fila, obtienes un identificador único:
cases <- cases %>%
mutate(id = rownames(cases))
resultados:
levels id
1 111-111-111 1
2 222-222-222 2
3 999-999-999 3
luego se une al marco de datos de casos con sus datos:
data <- left_join(data, cases, by = c("personal_id" = "levels"))
crea una identificación más única pegando la identificación generada con el género:
mutate(UID = paste(id, gender, sep=""))
y finalmente elimine el personal_id y el id simple:
select(-personal_id, -id)
y ahí lo tienes :):
data <- left_join(data, cases, by = c("personal_id" = "levels")) %>%
mutate(UID = paste(id, gender, sep="")) %>%
select(-personal_id, -id)
resultados:
gender temperature UID
1 M 99.6 1M
2 F 98.2 3F
3 M 97.8 2M
4 M 95.5 1M
valoraciones y reseñas
Recuerda recomendar este artículo si te ayudó.