我有一些列,我想从一个数据框架中删除。我知道我们可以用类似的方法单独删除它们。
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]
EDIT :
对于那些还不熟悉索引函数的drop
参数的人来说,如果你想保留一列作为一个数据框,你就会这样做。
keeps <- "y"
DF[ , keeps, drop = FALSE]
drop=TRUE
(或者不提)会去掉不必要的维度,从而返回一个包含y
列值的向量。
还有 "子集 "命令,如果你知道你想要哪些列,就很有用。
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))