我有一个问题要解决,如何删除R中具有零值的行。换句话说,我可以使用na.omit()
删除所有NA值,或者使用complete.cases()
删除包含NA值的行。
有没有人知道如何删除R中零值的行?
例如:
之前的
| 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 |
之后的
| 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 |
发布于 2012-04-02 22:01:15
有几种不同的方法可以做到这一点。我更喜欢使用apply
,因为它很容易扩展:
##Generate some data
dd = data.frame(a = 1:4, b= 1:0, c=0:3)
##Go through each row and determine if a value is zero
row_sub = apply(dd, 1, function(row) all(row !=0 ))
##Subset as usual
dd[row_sub,]
发布于 2018-05-15 04:50:11
我会做以下事情。
将零设置为NA。
data[data==0] <- NA
data
删除与NA关联的行。
data2<-data[complete.cases(data),]
发布于 2012-04-02 22:05:51
我可能会同意Joran的建议,用NAs替换0,然后使用你提到的内置函数。如果您不能/不想这样做,一种方法是使用any()
查找包含0的行并子集出这些行:
set.seed(42)
#Fake data
x <- data.frame(a = sample(0:2, 5, TRUE), b = sample(0:2, 5, TRUE))
> x
a b
1 2 1
2 2 2
3 0 0
4 2 1
5 1 2
#Subset out any rows with a 0 in them
#Note the negation with ! around the apply function
x[!(apply(x, 1, function(y) any(y == 0))),]
a b
1 2 1
2 2 2
4 2 1
5 1 2
要实现Joran的方法,下面这样的代码应该可以让您开始:
x[x==0] <- NA
https://stackoverflow.com/questions/9977686
复制相似问题