我有一些列要从数据框中删除。我知道我们可以使用以下内容单独删除它们:
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,c,您可以执行以下操作:
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"] # Selects all but x into a new data.table.
或多个变量
dt[, c("x","y") := NULL]
dt[, !c("x", "y")]