2015-07-21 57 views
1

如果我有像这样如何删除一整行,如果它是全0 R中

4 6 
6 0 
4 5 
0 0 
6 5 
0 4 
4 4 

但很多更大的数据帧,我能写什么命令,将删除任何行是完全0的,例如我的示例中的第4行。

最后,它看起来像这样

4 6 
6 0 
4 5 
6 5 
0 4 
4 4 

谢谢!

回答

4

是这样的吗?

df[apply(df[, sapply(df, is.numeric)], 1, function(x) !all(x==0)), ] 

df[rowSums(abs(df[, sapply(df, is.numeric)])) != 0, ] 

实施例:

> df <- data.frame(x=c(1, 2, 0), y=c(0, 1, 0), z=letters[1:3]) 
> df 
    x y z 
1 1 0 a 
2 2 1 b 
3 0 0 c 

> df[rowSums(abs(df[, sapply(df, is.numeric)])) != 0, ] 
    x y z 
1 1 0 a 
2 2 1 b 
+0

没有工作......我不想删除所有零,只有完全为0的行 – user4999605

+0

感谢您的纠正,但它仍然无法正常工作。我喜欢第二种选择,但由于我的一些列是数字,有些是字符矢量,它也不能工作:( – user4999605

+4

如果是这样,请提供一个示例数据,最好使用'dput(head(df))'。 – zero323

1

也许这有助于:

df <- df[-which(rowSums(abs(df)) == 0),] 
#> df 
# X1 X2 
#1 4 0 
#2 6 6 
#3 6 5 
#5 4 4 
#6 5 4 
#7 0 4 

数据

df <- data.frame(matrix(c(4, 6, 6, 0, 4, 5, 0, 0, 6, 5, 0, 4, 4, 4), ncol=2)) 
相关问题