假设我有一个看起来像这样的数据框
ca01<- c(1:10)
ca02<- c(2:11)
ca03<- c(3:12)
stuff.1<- rep('test',10)
other<- rep(9,10)
data<- data.frame(ca01,ca02,ca03,stuff.1,other)
然后我创建一个包含列名
的向量samps<- colnames(data)
然后我想过滤此向量以仅包含以前缀“ca”开头的项目。我不想通过编写单独删除这些内容的代码行来排除stuff.1和其他内容,例如
samps<-samps[samps!='stuff.1']
samps<-samps[samps!='other']
不合适。
答案 0 :(得分:4)
尝试使用grepl
> Names <- colnames(data)
> Names[grepl("^ca", Names)]
[1] "ca01" "ca02" "ca03"
答案 1 :(得分:1)
如果您希望稍后使用该向量对数据进行子集化,那么您可以使用包dplyr来执行此类操作。它有一个函数select
来选择/取消选择data.frame的列,在该函数中你可以使用各种特殊的选择函数。在这种情况下,因为您要选择带前缀的列,您可以使用名为starts_with()
的特殊函数。这是它的样子:
library(dplyr)
data %>%
select(starts_with("ca"))
# ca01 ca02 ca03
#1 1 2 3
#2 2 3 4
#3 3 4 5
#4 4 5 6
#5 5 6 7
#6 6 7 8
#7 7 8 9
#8 8 9 10
#9 9 10 11
#10 10 11 12
您可以在其他情况下使用其他选择功能,例如ends_with
,contains
,one_of
等。您可以在加载后输入?select
来阅读相关内容包裹。
%>%
是一个正向管道运算符,您可以使用它来创建多个命令的管道或链,并将数据从一个函数转发到下一个函数。