我想知道是否有办法按组中第一列的名称选择一组列,然后是a)到数据帧末尾的所有下一列,或b)到另一列,也使用其名称。
a)作为第一个问题的示例,在mtcars
数据集中,有没有办法从drat
到数据框末尾选择列? (类似于mtcars[,'drat':ncol(mtcars)]
)
b)对于第二个问题,有没有办法选择从cyl
开始到wt
结束的列? (类似于mtcars[,'cyl':'wt']
)
答案 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)
如果我们需要使用带引号的字符串,请将其转换为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}")))