2016-04-15 80 views
0

我定义了一个数据帧为:子集与“和”的条件(R)一个数据帧

df <- data.frame(c(1,0,4,0,4),c(3,2,0,0,2)) 
names(df) <- c("A","B") 

其中:

> df 
    A B 
1 1 3 
2 0 2 
3 4 0 
4 0 0 
5 4 2 

现在我想只拿了“不是完全空”行。我这样做:

df_notNull <- subset(df,df$A!=0 & df$B!=0) 
> df_notNull 
     A B 
    1 1 3 
    5 4 2 

显然我没有得到我想要的。问题不是“和”条件,因为我只想当我有两个零时忽略这些行(所以“和”)。我必须以不同的方式写作吗?

回答

3
df[rowSums(df) != 0,] 
# A B 
#1 1 3 
#2 0 2 
#3 4 0 
#5 4 2 
2

你与你的代码,告诉什么是slecet当两者都没有0,所以,使用|(OR),而不是&或以不同的方式使用!

df_notNull <- subset(df,df$A!=0 | df$B!=0) 

df_notNull <- subset(df,!(df$A==0 & df$B==0)) 

为@Frank建议,你不需要df$

df_notNull <- subset(df,A!=0 | B!=0) 
df_notNull <- subset(df,!(A==0 & B==0)) 
+1

我想这里面'子集(df,...)'你不需要'df $' – Frank

+0

@Frank,这是正确的建立在OP的代码上,并没有注意到.. – Ananta

1

我们可以使用Reduce+

df[!!Reduce(`+`, df),] 
# A B 
#1 1 3 
#2 0 2 
#3 4 0 
#5 4 2