数据库$ VAR 它的值为0和1。
如何重新定义数据框以删除1?
谢谢!
答案 0 :(得分:3)
TMTOWTDI
使用subset
:
df.new <- subset(df, VAR == 0)
编辑:
David的解决方案似乎是我机器上最快的解决方案。子集似乎是最慢的。我甚至不会假装试图了解这些差异背后的情况:
> df <- data.frame(y=rep(c(1,0), times=1000000))
>
> system.time(df[ -which(df[,"y"]==1), , drop=FALSE])
user system elapsed
0.16 0.05 0.23
> system.time(df[which(df$y == 0), ])
user system elapsed
0.03 0.01 0.06
> system.time(subset(df, y == 0))
user system elapsed
0.14 0.09 0.27
答案 1 :(得分:2)
如果我有名声,我会使用“子集”来回答这个问题:-)。您也可以直接使用逻辑向量进行子集化 - 不需要“which”:
d <- data.frame(VAR = c(0,1,0,1,1))
d[d$VAR == 0, , drop=FALSE]
我很惊讶在至少一个案例中发现逻辑版本更快一点。 (我预计“哪个”版本可能会赢,因为R可能会为结果预先分配适当的存储量。)
> d <- data.frame(y=rep(c(1,0), times=1000000))
> system.time(d[which(d$y == 0), ])
user system elapsed
0.119 0.067 0.188
> system.time(d[d$y == 0, ])
user system elapsed
0.049 0.024 0.074
答案 2 :(得分:1)
试试这个:
R> df <- data.frame(VAR = c(0,1,0,1,1))
R> df[ -which(df[,"VAR"]==1), , drop=FALSE]
VAR
1 0
3 0
R>
我们使用which( booleanExpr )
来获取您的条件所适用的索引,然后在这些索引上使用-1来排除它们,最后使用drop=FALSE
来阻止我们data.frame
的一个列折叠成矢量。