R语言如何同时按名称和序列范围选取数据框变量生成子集
实现方案
基础R原生写法(无需加载额外包)
通过paste0批量生成连续序列的变量名,和手动指定的变量名合并后传入select参数即可,避免手动输入大量变量名,也比写列序号更稳定(不会因为数据集列顺序变动导致选择错误):
# 手动指定的离散变量列表 manual_selected <- c( "MQ4", "FQ4", # RX STATUS "MQ9", "FQ9", # ETHNICITY "MQ10", "FQ10", # RACE "MQ465", "FQ465", # SEX "MQ13", "FQ13", # GENDER "MQ14", "FQ14" # SEXORIENT ) # 生成MQ180到MQ310的连续序列变量名 seq_selected <- paste0("MQ", 180:310) # 合并变量列表取子集 new_df <- subset(data, select = c(manual_selected, seq_selected))
dplyr包写法(语法更简洁)
如果已经在使用tidyverse系列工具,可直接用select搭配num_range参数实现,代码更精简:
library(dplyr) new_df <- data %>% select( MQ4, FQ4, MQ9, FQ9, MQ10, FQ10, MQ465, FQ465, MQ13, FQ13, MQ14, FQ14, num_range(prefix = "MQ", range = 180:310) )
注意事项
你之前尝试直接写列序号163:310的方式不推荐,只要原数据集增删列、列顺序调整就会导致选到错误的列,用变量名匹配的兼容性更强。另外你原代码里重复写了两次MQ182,如果不需要重复列可以直接删掉冗余项。
内容的提问来源于stack exchange,提问作者CougarFan
相关产品推荐
相关产品推荐

