2016-04-15 82 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