根据某些值的存在/不存在从数据框中删除列

bab*_*ist 0 r subset multiple-columns dplyr

我想通过删除满足或不满足某个条件的列来对数据框进行子集化.例如,给出以下数据:

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

这使:

  w x y z
  a 1 0 0
  b 0 1 0
  c 0 0 1
Run Code Online (Sandbox Code Playgroud)

我想在对行进行子集化后删除包含0的列.例如:

df %>% filter(., w == 'a')
Run Code Online (Sandbox Code Playgroud)

生产:

w x y z
a 1 0 0
Run Code Online (Sandbox Code Playgroud)

然后我想减少到:

x
1
Run Code Online (Sandbox Code Playgroud)

我希望使用这个dplyr,因此下一步应该在filter命令之后进行管道传输.我尝试过summarise与apply一起使用,但是没有用.

Psi*_*dom 5

你可以使用select_if():

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

#  x
#1 1
Run Code Online (Sandbox Code Playgroud)