【问题标题】:Indexing by column name to the end of the dataframe - R按列名索引到数据框的末尾 - R
【发布时间】:2018-05-07 03:47:38
【问题描述】:

我想知道是否有一种方法可以通过组中第一列的名称选择一组列,然后选择所有接下来的列 a) 到数据框的末尾,或者 b) 到另一个列,也使用其名称。

a) 以第一个问题为例,在mtcars 数据集中,有没有办法选择从drat 到数据框末尾的列? (类似于mtcars[,'drat':ncol(mtcars)]

b) 对于第二个问题,有没有办法选择从cyl 开始到wt 结束的列? (类似于mtcars[,'cyl':'wt']

【问题讨论】:

    标签: r dataframe indexing


    【解决方案1】:

    已经提供了许多优雅的解决方案,但甚至可以使用base-R 来获得所需的结果,使用which 如下:

    回答:

    mtcars[,which(names(mtcars) == "drat"):ncol(mtcars)]
    

    答案:

    mtcars[,which(names(mtcars) == "cyl"):which(names(mtcars) == "wt")]
    #                    cyl  disp  hp drat    wt
    #Mazda RX4             6 160.0 110 3.90 2.620
    #Mazda RX4 Wag         6 160.0 110 3.90 2.875
    #Datsun 710            4 108.0  93 3.85 2.320
    #Hornet 4 Drive        6 258.0 110 3.08 3.215
    #Hornet Sportabout     8 360.0 175 3.15 3.440
    #......so on
    

    【讨论】:

      【解决方案2】:

      我们可以使用来自dplyrselect 来解决这个问题

      回答 a)

      mtcars %>% select(drat:get(last(names(.))))
      

      答案 b)

      mtcars %>% select(cyl:wt)
      

      【讨论】:

        【解决方案3】:

        dplyr 中,select 函数正是这样做的(不需要引号):

        mtcards %>%
          select(cyl:wt)
        

        【讨论】:

          【解决方案4】:

          如果我们需要使用带引号的字符串,请将其转换为sym (symbol),然后进行求值 (!!

          mtcars %>% 
               select(!! (rlang::sym("cyl")): !!(rlang::sym("wt")))
          

          当这些存储在一个对象中时

          a <- "cyl"
          b <- "wt"
          
          mtcars %>%
            select(!! (rlang::sym(a)): !!(rlang::sym(b)))
          

          或者另一种选择是

          mtcars %>%
              select(!! rlang::parse_expr(glue::glue("{a}:{b}")))
          

          【讨论】:

          • @J.Con 它正在转换为symbol。您可以使用来自base Rrlang::symas.symbol
          • 这是一个有趣的解决方案,但请不要编写看起来像这样的代码......哈哈
          猜你喜欢
          • 1970-01-01
          • 2021-11-17
          • 2015-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-29
          相关资源
          最近更新 更多