【发布时间】:2018-09-03 21:23:57
【问题描述】:
简要数据集描述:我有从 Qualtrics 生成的调查数据,我已将其作为 tibble 导入 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
还有一些其他相关问题,但我似乎找不到任何专注于基于混合变量类(vs.all numeric)提取列名(vs.the values themselves)的答案,使用一个tidyverse解决方案
我一直在尝试的东西 - 我知道我在这里缺少一些东西......:
ds %>% map(which(!is.na(.)))ds %>% map(tail(!is.na(.), 2))ds %>% rowwise() %>% mutate(last = which(!is.na(ds)))
?
非常感谢您的帮助!
【问题讨论】:
-
max(which(!is.na(ds)))?
标签: r dplyr na tidyverse tibble