0
A
回答
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
列成矢量。
3
TMTOWTDI
使用subset
:
df.new <- subset(df, VAR == 0)
编辑:
大卫的解决方案似乎是我的机器上最快的。子集似乎是最慢的。我甚至不会假装尝试理解这是怎么回事下是考虑到这些差异:
> 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
+0
在第二次计时中包含'drop = FALSE'。它会减慢这种方法。 – Marek 2010-09-01 14:32:16
2
我会使用“子集”给予好评的答案,如果我有口碑为它:-)。您也可以直接使用逻辑矢量子集 - 无需“这”:
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
相关问题
- 1. 重新排列r中的数据帧
- 2. 融化并重新生成r中的新数据帧
- 3. R重组数据帧
- 4. 重塑数据帧中的R
- 5. 重塑R中的数据帧
- 6. 重新排列R中的数据帧中的列
- 7. 重新排列在数据帧中的变量中的R
- 8. 创建R中新的数据帧
- 9. 重新定义的函数在R包
- 10. R:数据帧中带重音符号
- 11. 在R中重塑一个数据帧
- 12. 重新格式化R中的杂乱数据帧列
- 13. 你如何重新组织数据帧中的R
- 14. R:数据帧中列的非标准重新排序
- 15. 将数据帧行转换为新的数据帧列R
- 16. 重新定义R中对象的类
- 17. R:在类似的空间中定义数据帧
- 18. 确定R中多个数据帧的重叠和子集
- 19. 在数据帧中的R
- 20. 中的R数据帧
- 21. 在数据帧的R中
- 22. 从数据帧中的R
- 23. R数据帧
- 24. R:数据帧
- 25. 没有idvar重塑数据帧 - R的
- 26. R重复元素的数据帧
- 27. 在熊猫数据帧重新定义索引对象
- 28. R:将2D数据帧列表重组为一个数据帧
- 29. 的R - 重新排序列的某些部分在数据帧
- 30. r使用用户定义的数据帧列函数
要删除值1还是删除了值为1的所有观测值?或者你是否想要将数据帧拆分为VAR == 0和VAR == 1分开的观测值? – Greg 2010-08-31 22:32:08
我想要删除所有值为1的观测值,以便当我调用'database $ VAR'时,我只会得到0。谢谢! – Brian 2010-08-31 22:38:32