Select 多列 dplyr::select() 以数字作为名称
Select multiple columns with dplyr::select() with numbers as names
假设我有以下数据框:
a <- runif(10)
dd <- as.data.frame(t(a))
names(dd) <- c("ID", "a", "a2", "b", "b2", "f", "XXX", "1", "4", "8")
在 dplyr
中,有一个很好的方法来 select 多个列。例如,对于 select 列 a 和列 f 之间的列,我可以使用
dd %>% dplyr::select(a:f)
在我的问题中,数据框最后一部分的列可能会有所不同,但它们的名称总是介于 1 和 99 之间。但是,我似乎无法使用与以上:
> dd %>% select(1:99)
Error: Position must be between 0 and n
> dd %>% select("1":"99")
Error: Position must be between 0 and n
这是因为使用 select()
试图以这种方式按位置 select 列。
我希望能够获得包含 a 和 f 之间所有列的数据框,以及那些带有标签的数据框1 和 99 之间的数字。 select()
可以一次性完成吗?
以数字开头的列名称,例如数据中的“1”和“8”,不是语法上有效的名称(请参阅?make.names
)。然后查看 ?Quotes
中的 'Names and Identifiers' 部分:“可以使用其他 [语法无效] 名称,前提是它们被引用。首选引号是反引号”。
因此,用反引号 (`
) 包裹无效的列名:
dd %>% dplyr::select(a:f, `1`:`8`)
# a a2 b b2 f 1 4 8
# 1 0.2510023 0.4109819 0.6787226 0.4974859 0.01828614 0.7449878 0.1648462 0.5875638
另一种选择是使用 select
、select_
:
的 SE 版本
dd %>% dplyr::select_(.dots = c("a", "a2", ..., "1", "4", "8"))
我们可以 select 列 a:f,并通过将 colnames 转换为数字来添加数字列的索引:
dd %>%
select(a:f, which(!is.na(as.numeric(colnames(dd)))))
假设我有以下数据框:
a <- runif(10)
dd <- as.data.frame(t(a))
names(dd) <- c("ID", "a", "a2", "b", "b2", "f", "XXX", "1", "4", "8")
在 dplyr
中,有一个很好的方法来 select 多个列。例如,对于 select 列 a 和列 f 之间的列,我可以使用
dd %>% dplyr::select(a:f)
在我的问题中,数据框最后一部分的列可能会有所不同,但它们的名称总是介于 1 和 99 之间。但是,我似乎无法使用与以上:
> dd %>% select(1:99)
Error: Position must be between 0 and n
> dd %>% select("1":"99")
Error: Position must be between 0 and n
这是因为使用 select()
试图以这种方式按位置 select 列。
我希望能够获得包含 a 和 f 之间所有列的数据框,以及那些带有标签的数据框1 和 99 之间的数字。 select()
可以一次性完成吗?
以数字开头的列名称,例如数据中的“1”和“8”,不是语法上有效的名称(请参阅?make.names
)。然后查看 ?Quotes
中的 'Names and Identifiers' 部分:“可以使用其他 [语法无效] 名称,前提是它们被引用。首选引号是反引号”。
因此,用反引号 (`
) 包裹无效的列名:
dd %>% dplyr::select(a:f, `1`:`8`)
# a a2 b b2 f 1 4 8
# 1 0.2510023 0.4109819 0.6787226 0.4974859 0.01828614 0.7449878 0.1648462 0.5875638
另一种选择是使用 select
、select_
:
dd %>% dplyr::select_(.dots = c("a", "a2", ..., "1", "4", "8"))
我们可以 select 列 a:f,并通过将 colnames 转换为数字来添加数字列的索引:
dd %>%
select(a:f, which(!is.na(as.numeric(colnames(dd)))))