按名称删除数据框列
我有一些我想从数据框中删除的列。 我知道我们可以使用类似的方法单独删除它们:
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