Я работаю над набором данных, где каждый участник (ID) оценивался 1, 2 или 3 раза.Это продольное исследование.К сожалению, когда первый аналитик закодировал набор данных, он / он не назначил никакой информации об этом.
Поскольку все участники имеют информацию о возрасте (в месяцах), легко определить, когда была первая оценка, когда былавторой и тд.В первой оценке участник был моложе, чем во второй, и так далее.
Я использовал инструменты Tidyverse, чтобы справиться с этим, и все работает.Однако я действительно знаю (представьте ...), что есть много других (гораздо более) элегантных решений, и я пришел на этот форум, чтобы попросить об этом.Может ли кто-нибудь подсказать мне, как сделать этот код короче и понятнее?
Это поддельные данные для воспроизведения кода:
ds <- data.frame(id = seq(1:6),
months = round(rnorm(18, mean=12, sd=2),0),
x1 = sample(0:2),
x2 = sample(0:2),
x3 = sample(0:2),
x4 = sample(0:2))
#add how many times each child was acessed
ds <- ds %>% group_by(id) %>% mutate(how_many = n())
#Add position
ds %>% group_by(id) %>%
mutate(first = min(months),
max = max(months),
med = median(months)) -> ds
#add label to the third evaluation (the second will be missing)
ds %>%
mutate(group = case_when((how_many == 3) & (months %in% first) ~ "First evaluation",
(how_many == 3) & (months %in% max) ~ "Third evaluation",
TRUE ~ group)) -> ds
#add label to the second evaluation for all children evaluated two times
ds %>% mutate_at(vars(group), funs(if_else(is.na(.),"Second Evaluation",.))) -> ds
Это мой оригинальный код:
temp <- dataset %>% select(idind, arm, infant_sex,infant_age_months)
#add how many times each child was acessed
temp <- temp %>% group_by(idind) %>% mutate(how_many = n())
#Add position
temp %>% group_by(idind) %>%
mutate(first = min(infant_age_months),
max = max(infant_age_months),
med = median(infant_age_months)) -> temp
#add label to the first evaluation
temp %>%
mutate(group = case_when(how_many == 1 ~ "First evaluation")) -> temp
#add label to the second evaluation (and keep all previous results)
temp %>%
mutate(group = case_when((how_many == 2) & (infant_age_months %in% first) ~ "First evaluation",
(how_many == 2) & (infant_age_months %in% max) ~ "Second evaluation",
TRUE ~ group)) -> temp
#add label to the third evaluation (the second will be missing)
temp %>%
mutate(group = case_when((how_many == 3) & (infant_age_months %in% first) ~ "First evaluation",
(how_many == 3) & (infant_age_months %in% max) ~ "Third evaluation",
TRUE ~ group)) -> temp
#add label to the second evaluation for all children evaluated two times
temp %>% mutate_at(vars(group), funs(if_else(is.na(.),"Second Evaluation",.))) -> temp
Пожалуйста, имейте в виду, что я использовал окно поиска, прежде чем спрашивать об этом, и я действительно представляю, что другие люди могут задавать тот же вопрос при программировании.Большое спасибо