基于R中的列名称的子设置列

时间:2017-11-29 11:26:06

标签: r subset

我有一个数据框,列名如下所示

colnames(Data)
[1] "ID" "A"  "B"  "C"  "D"  "E"  "F"  "G" 

我想在列D

之前选择所有列

目前有专栏EFG。但是我可能会期待更多我不确定的专栏,我也可能会在D之前预期更多专栏,所以我不确定列D可用的位置

我们可以使用R中的子集命令吗?如下所示

Datanew <- subset(Data,select=c("D","E","F","G"))

请建议。

2 个答案:

答案 0 :(得分:3)

查找哪个列为D并选择以下所有列(使用ncol):

columnToSelect <- which(names(Data) == "D"):ncol(Data)
Datanew <- subset(Data, select = columnToSelect)

答案 1 :(得分:0)

一旦找到列tail所在的位置,就可以使用D来获取数据框的最后n个名称。我们可以像这样使用它

tail(1:5, 3) # return the last three elements

以下是等效的

tail(1:5, -2) # don't return the first two elements

如果我们使用which查找列D

columnToSelect <- which(names(Data) == "D")

我们可以使用tail获取D及其后的所有列。

tail(names(Data), -(columnToSelect - 1))

然后,列选择可以包含在一个简洁的小调用中

Data[tail(names(Data), -(which(names(Data) == "D") - 1))]

完全可重复的例子:

Data <- 
  lapply(LETTERS[1:10],
         function(l){
           x <- data.frame(l = rnorm(10))
           names(x) <- l
           x
         })
Data <- as.data.frame(Data)

Data[tail(names(Data), -(which(names(Data) == "D") - 1))]