我有一个问题要解决如何在R中删除零值的行 . 在另一方面,我可以使用 na.omit()
删除所有NA值或使用 complete.cases()
删除包含NA值的行 .
有没有人知道如何在R中删除零值的行?
例如 :
Before
| DateTime | Mac1 | Mac2 | Mac3 | Mac4 |
----------------------------------------------------
| 2011-04-02 06:00 | 20 | 0 | 20 | 20 |
| 2011-04-02 06:05 | 21 | 21 | 21 | 21 |
| 2011-04-02 06:10 | 22 | 22 | 22 | 22 |
| 2011-04-02 06:15 | 23 | 23 | 0 | 23 |
| 2011-04-02 06:20 | 24 | 24 | 24 | 24 |
| 2011-04-02 06:25 | 0 | 25 | 25 | 0 |
After
| DateTime | Mac1 | Mac2 | Mac3 | Mac4 |
----------------------------------------------------
| 2011-04-02 06:05 | 21 | 21 | 21 | 21 |
| 2011-04-02 06:10 | 22 | 22 | 22 | 22 |
| 2011-04-02 06:20 | 24 | 24 | 24 | 24 |
6 回答
有几种不同的方法可以做到这一点 . 我更喜欢使用
apply
,因为它很容易扩展:好吧,你可以将你的
0
换成NA
,然后使用其中一个解决方案,但为了区别,你会注意到一个数字只有一个有限的对数,如果它大于0
,那么rowSums
的如果一行中没有零,log
将只是有限的 .我可能会和Nora一起使用Joran 's suggestion of replacing 0',然后使用你提到的内置函数 . 如果你想做到这一点,一种方法是使用
any()
来查找包含0的行并将其子集化为:要实现Joran的方法,这样的事情应该让你开始:
我更喜欢简单地改编csgillespie的方法,而不需要函数定义:
其中
d
是您的数据框 .我会做以下事情 .
将零设置为NA .
删除与NA关联的行 .
您可以使用dplyr包中的过滤器 .
我们来调用您的数据框df
library(dplyr) df1 <- filter(df, Mac1 > 0, Mac2 > 0, Mac3 > 0, Mac4 > 0)
df1只包含条目大于零的行 . 希望这可以帮助 .