子集列基于列名列表并将列放在其前面

时间:2014-12-18 21:52:17

标签: r dataframe subset

我有一个更大的数据集遵循相同的顺序,一个唯一的日期列,数据,唯一的日期列,日期等。我试图不仅按名称对数据列进行子集,而且还尝试使用唯一的日期列。下面的代码根据名称列表选择列,这是我想要的一部分,但是我也可以在子集列之前立即获取列的任何想法?

希望最终得到一个包含Date1,Fire,Date3,Earth列的DF(仅使用NameList)。

这是我可重现的代码:

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] 

2 个答案:

答案 0 :(得分:10)

怎么样

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

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

NewDF <- MAINDF[,idx] 

这里我们使用match()来查找所需列的索引,然后我们可以使用索引减法来获取列之前

答案 1 :(得分:7)

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

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

可生产

         Date1         Fire        Date3        Earth
1 -0.010908003  0.007700453 -0.022778726 -0.016413307
2  0.022300509  0.021341360  0.014204445 -0.004492150
3 -0.021544992  0.014187158 -0.015174048 -0.000495121
4 -0.010600955 -0.006960160 -0.024535954 -0.024210771
5 -0.004694499  0.007198620  0.005543146 -0.021676692
6 -0.010623787  0.015977135 -0.027741109 -0.021102651
...