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