如何用正则筛选R数据框列名并按问题编号分组为嵌套列表?
解决方案
直接在原有管道后追加字符串提取与分组拆分的操作即可,无需额外转换数据结构,代码如下:
library(dplyr) library(stringr) result <- df %>% select(matches('Q[0-9]{2,3}/')) %>% names() %>% split(str_extract(., 'Q\\d{2,3}'))
代码解释
- 前两步和你原有逻辑一致:筛选出符合正则规则的列,再提取这些列的名称
str_extract(., 'Q\\d{2,3}'):从每个列名里提取出问题编号(比如从Q10/male里提取Q10),正则Q\\d{2,3}匹配"Q"开头后跟2-3位数字的片段split():把列名字符串向量按提取出的问题编号分组,自动生成以问题编号为名称的嵌套列表,每个子列表对应同一问题的所有列名
运行后得到的result结构如下:
$Q10 [1] "Q10/male" "Q10/female" $Q203 [1] "Q203/option_a" "Q203/option_b" "Q203/option_c"
内容的提问来源于stack exchange,提问作者johnjohn
相关产品推荐
相关产品推荐

