R 基于列名列表对列进行子集设置,并将列置于其前面

R 基于列名列表对列进行子集设置,并将列置于其前面,r,dataframe,subset,R,Dataframe,Subset,我有一个更大的数据集,按照相同的顺序,一个唯一的日期列,数据,唯一的日期列,日期等。我试图子集不仅是数据列的名称,但唯一的日期列也。下面的代码根据名称列表选择列,这是我想要的部分,但是我想知道如何在子列之前抓住该列吗 希望以包含Date1、Fire、Date3和Earth列的DF结束(仅使用名称列表) 这是我的可复制代码: Cnames <- c("Date1","Fire","Date2","Water","Date3","Earth") MAINDF <- data.frame(

我有一个更大的数据集,按照相同的顺序,一个唯一的日期列,数据,唯一的日期列,日期等。我试图子集不仅是数据列的名称,但唯一的日期列也。下面的代码根据名称列表选择列,这是我想要的部分,但是我想知道如何在子列之前抓住该列吗

希望以包含Date1、Fire、Date3和Earth列的DF结束(仅使用名称列表)

这是我的可复制代码:

Cnames <- c("Date1","Fire","Date2","Water","Date3","Earth")
MAINDF <- data.frame(replicate(6,runif(120,-0.03,0.03)))
colnames(MAINDF) <- Cnames

NameList <- c("Fire","Earth")

NewDF <- MAINDF[,colnames(MAINDF) %in% NameList] 

Cnames使用
which
从名称中获取列号,然后它只是一个简单的算术:

col.num <- which(colnames(MAINDF) %in% NameList)
NewDF <- MAINDF[,sort(c(col.num, col.num - 1))]
怎么样

NameList <- c("Fire","Earth")

idx <- match(NameList, names(MAINDF))
idx <- sort(c(idx-1, idx))

NewDF <- MAINDF[,idx] 
名称列表
NameList <- c("Fire","Earth")

idx <- match(NameList, names(MAINDF))
idx <- sort(c(idx-1, idx))

NewDF <- MAINDF[,idx]