2016-11-30 66 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 
相关问题