【问题标题】:Create subset of ranges and individual items创建范围和单个项目的子集
【发布时间】:2021-11-11 15:21:28
【问题描述】:

我正在使用 R 并且有一个包含约 3000 个心理测试数据的数据集。男女伴侣的数据都是二元的(尽管这对你来说不重要)。我正在创建一个仅包含感兴趣变量的新数据框,其中大部分未在原始数据中按顺序列出,因此我按名称选择它们,如下所示:

new_df <- subset(data, select=c("MQ4", "FQ4", #RX STATUS
                               "MQ9", "FQ9", #ETHNICITY
                               "MQ10", "FQ10", #RACE
                               "MQ465", "FQ465", #SEX
                               "MQ13", "FQ13", #GENDER
                               "MQ14", "FQ14", #SEXORIENT
                               "MQ180", "MQ181", "MQ182", "MQ182" ### HERE IS WHERE I NEED HELP
 )) 

但是,我有大约 150 个按顺序列出的独特项目,我想选择它们而不用写出“MQ180”到“MQ310”来选择它们。我一直在尝试找出一种方法来选择范围以及我一直在做的各个项目。这是我目前正在尝试的:

new_df <- subset(data, select=c("MQ4", "FQ4", #RX STATUS
                               "MQ9", "FQ9", #ETHNICITY
                               "MQ10", "FQ10", #RACE
                               "MQ465", "FQ465", #SEX
                               "MQ13", "FQ13", #GENDER
                               "MQ14", "FQ14", #SEXORIENT
                               163:310         ### HERE IS WHERE I NEED HELP
 )) 

【问题讨论】:

  • 虽然您有具体问题的答案,但我强烈敦促您在继续之前将数据框设为tidy。现在做一些额外的工作可以为您节省数小时的悲伤和痛苦。

标签: r subset


【解决方案1】:

一个选项:

dplyr::select(mtcars, "cyl", 5:8)

这将 mtcars 数据框子集为 cyl 列和第 5 到第 8 列:

                    cyl drat    wt  qsec vs
Mazda RX4             6 3.90 2.620 16.46  0
Mazda RX4 Wag         6 3.90 2.875 17.02  0
Datsun 710            4 3.85 2.320 18.61  1

这是一个基本的 R 替代方案,但可能有更好的方法:

cbind(mtcars[, 'cyl'],  mtcars[, 5:8]) 

mtcars 原本:

                                          5     6     7  8 
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1

【讨论】:

  • 很棒的答案。即使我第一次尝试就得到了这些!谢谢!
【解决方案2】:

subsetselect的索引部分可以使用names

subset(data, select=c("MQ4", "FQ4", #RX STATUS
                               "MQ9", "FQ9", #ETHNICITY
                               "MQ10", "FQ10", #RACE
                               "MQ465", "FQ465", #SEX
                               "MQ13", "FQ13", #GENDER
                               "MQ14", "FQ14", #SEXORIENT
                               names(data)[163:310]         
 )) 

问题的出现是因为vector 的属性只能有一个class。因此,当我们同时拥有 characterinteger 时,整数将转换为 character,因此它将查找与名称匹配的列名称 "163" 而不是位置索引

【讨论】:

  • 非常感谢您的回答和解释为什么我的尝试不起作用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2017-09-24
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多