Краткое описание набора данных. У меня есть данные опроса, созданные с помощью Qualtrics, которые я импортировал в R в виде фрагмента. Каждый столбец соответствует вопросу опроса, и я сохранил исходный порядок столбцов (чтобы соответствовать порядку вопросов в опросе).
Проблема простым языком: из-за обычного выбывания участников не все участники ответили на все вопросы в опросе. Я хочу знать, как далеко продвинулся каждый участник в опросе, и на последний вопрос, на который они ответили, прежде чем остановиться.
Постановка проблемы в R: Я хочу сгенерировать (используя tidyverse):
- 1) Новый столбец (lastq), в котором для каждой строки (т. Е. Для каждого участника) указано имя последнего столбца, не относящегося к NA (т.е. имя последнего вопроса, который они ответили).
- 2) Второй новый столбец, в котором указан номер столбца в lastq
Пример фрейма данных df
df <- tibble(
year = c(2015, 2015, 2016, 2016),
grade = c(1, NA, 1, NA),
height = c("short", "tall", NA, NA),
gender = c(NA, "m", NA, "f")
)
Исходный формат df
# A tibble: 4 x 4
year grade height gender
<dbl> <dbl> <chr> <chr>
1 2015 1 short <NA>
2 2015 NA tall m
3 2016 1 <NA> <NA>
4 2016 NA <NA> f
Желаемый конечный df
# A tibble: 4 x 6
year grade height gender lastq lastqnum
<dbl> <dbl> <chr> <chr> <chr> <dbl>
1 2015 1 short <NA> height 3
2 2015 NA tall m gender 4
3 2016 1 <NA> <NA> grade 2
4 2016 NA <NA> f gender 4
Есть и другие связанные вопросы, но я не могу найти ответов, ориентированных на извлечение имен столбцов (по сравнению с сами значения) на основе набора смешанных классов переменных (по сравнению с all numeric), используя решение tidyverse
То, что я пытался - я знаю, что мне здесь кое-что не хватает ...:
ds %>% map(which(!is.na(.)))
ds %>% map(tail(!is.na(.), 2))
ds %>% rowwise() %>% mutate(last = which(!is.na(ds)))
?
Спасибо большое за вашу помощь!