如果数据帧R中的一行或多行包含0,则删除整个列

如果数据帧R中的一行或多行包含0,则删除整个列,r,dataframe,R,Dataframe,我有一个数据帧 我需要删除一行或多行中包含0的列,但我无法删除,我尝试了一些在此处找到的想法,但没有一个对我有效,有人有想法吗?您可以: df[applydf,1,FUN=functionx allx!=0,] 另一种方法 library(dplyr) select_if(data, ~{!0 %in% unique(.)}) 我们可以将矢量化选项与基R中的行和一起使用,以删除具有任何0的行 df[!rowSums(!df),, drop = FALSE] # v1 v2 v3 #3

我有一个数据帧 我需要删除一行或多行中包含0的列,但我无法删除,我尝试了一些在此处找到的想法,但没有一个对我有效,有人有想法吗?

您可以:

df[applydf,1,FUN=functionx allx!=0,]
另一种方法

library(dplyr)

select_if(data, ~{!0 %in% unique(.)})

我们可以将矢量化选项与基R中的行和一起使用,以删除具有任何0的行

df[!rowSums(!df),, drop  = FALSE]
#  v1 v2 v3
#3  2  1  2
或者使用lappy和Reduce

或使用dplyr中的所有筛选器_

如果要删除列,请使用基于R的筛选器

还是带着睿智

数据
df[Reduce(`&`, lapply(df, `!=`, 0)),, drop = FALSE]
#   v1 v2 v3
#3  2  1  2
library(dplyr)
df %>%
    filter_all(all_vars(. != 0))
#   v1 v2 v3
#1  2  1  2
Filter(function(x) !any(x ==0), df2)
#  v2
#1  1
#2  2
#3  3
df2[sapply(df2,  function(x) all(x != 0))]
#  v2
#1  1
#2  2
#3  3
 df <- data.frame(v1 = c(0, 1, 2), v2 = c(1, 0, 1), v3 = c(0, 1, 2))
 df2 <- data.frame(v1 = c(0, 1, 2), v2 = c(1, 2, 3), v3 = c(1, 0, 3))