我有一个更大的数据集遵循相同的顺序,一个唯一的日期列,数据,唯一的日期列,日期等。我试图不仅按名称对数据列进行子集,而且还尝试使用唯一的日期列。下面的代码根据名称列表选择列,这是我想要的一部分,但是我也可以在子集列之前立即获取列的任何想法?
希望最终得到一个包含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]
答案 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
...