按列名索引到数据帧的末尾 - R.

时间:2018-05-07 03:47:38

标签: r dataframe indexing

我想知道是否有办法按组中第一列的名称选择一组列,然后是a)到数据帧末尾的所有下一列,或b)到另一列,也使用其名称。

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

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

4 个答案:

答案 0 :(得分:3)

已经提供了许多优雅的解决方案,但是人们甚至可以使用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

答案 1 :(得分:2)

我们可以使用select

中的dplyr执行此操作

回答a)

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

答案b)

mtcars %>% select(cyl:wt)

答案 2 :(得分:1)

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

mtcards %>%
  select(cyl:wt)

答案 3 :(得分:1)

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

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}")))