2016-11-30 28 views
0

我想通過刪除符合或不符合某些條件的列來對數據框進行子集合。例如,給出以下數據:基於某些值的存在/不存在刪除數據框中的列

df <- data.frame(w = c('a', 'b', 'c'), 
       x = c(1, 0, 0), 
       y = c(0, 1, 0), 
       z = c(0, 0, 1)) 

其中給出:

w x y z 
    a 1 0 0 
    b 0 1 0 
    c 0 0 1 

我想刪除子集劃分的行之後包含0列。例如:

df %>% filter(., w == 'a') 

產地:

w x y z 
a 1 0 0 

,我想,以再減少到:

x 
1 

我要做到這一點使用dplyr,因此下一步應在filter命令後傳送。我已經嘗試使用summarise與適用,但沒有奏效。

+0

笨重,但在基地,你可以使用:'lapply(DF $ W,函數(X){DF [其中(DF $ W = = X),其中(DF [which(df $ w == x),]!= 0)]})'這會給你一個列表,列出每個'df $ w'中的值 – Badger

回答

5

您可以使用select_if()

df %>% filter(w == 'a') %>% select_if(function(col) is.numeric(col) && all(col != 0)) 

# x 
#1 1 
相關問題