我有一个数据框,列名如下所示
colnames(Data)
[1] "ID" "A" "B" "C" "D" "E" "F" "G"
我想在列D
目前有专栏E
,F
和G
。但是我可能会期待更多我不确定的专栏,我也可能会在D
之前预期更多专栏,所以我不确定列D
可用的位置
我们可以使用R中的子集命令吗?如下所示
Datanew <- subset(Data,select=c("D","E","F","G"))
请建议。
答案 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))]