按名称删除数据框列

我有一些我想从数据框中删除的列。 我知道我们可以使用类似的方法单独删除它们:

df$x <- NULL

但我希望用更少的命令来做到这一点。

另外,我知道我可以像这样使用整数索引来删除列:

df <- df[ -c(1, 3:6, 12) ]

但我担心我的变量的相对位置可能会改变。

鉴于R是多么强大,我认为可能有比逐个删除每列更好的方法。


你可以使用一个简单的名字列表:

DF <- data.frame(
  x=1:10,
  y=10:1,
  z=rep(5,10),
  a=11:20
)
drops <- c("x","z")
DF[ , !(names(DF) %in% drops)]

或者,您也可以列出要保留的名单并按名称引用它们:

keeps <- c("y", "a")
DF[keeps]

编辑:对于那些仍然不熟悉索引函数的drop参数的人,如果你想保留一列作为数据框,你可以这样做:

keeps <- "y"
DF[ , keeps, drop = FALSE]

drop=TRUE (或不提及它)将删除不必要的维度,并因此返回列y值的向量。


还有subset命令,如果你知道你想要哪些列,这个命令很有用:

df <- data.frame(a = 1:10, b = 2:11, c = 3:12)
df <- subset(df, select = c(a, c))

在@hadley发表评论之后进行了更新:要删除列a,您可以执行以下操作:

df <- subset(df, select = -c(a, c))

within(df, rm(x))

可能是最简单的,或者对于多个变量:

within(df, rm(x, y))

或者如果你正在处理data.table s(按照如何在data.table中按名称删除列)?

dt[, x := NULL]   # deletes column x by reference instantly

dt[, !"x", with=FALSE]   # selects all but x into a new data.table

或者用于多个变量

dt[, c("x","y") := NULL]

dt[, !c("x", "y"), with=FALSE]

data.table的开发版本(安装说明)中, with = FALSE不再是必要的:

dt[ , !"x"]
dt[ , !c("x", "y")]
链接地址: http://www.djcxy.com/p/12225.html

上一篇: Drop data frame columns by name

下一篇: Convert data.frame columns from factors to characters