R 正在删除全部为0的列

R 正在删除全部为0的列,r,R,我正在尝试删除数据框中仅包含值0的所有列。我的代码是我在这个网站上找到的 dataset = dataset[ ,colSums(dataset != 0) > 0] 但是,我不断返回一个错误: [.data.frame(dataset,colSums(dataset!=0)>0)中出错: 选择未定义的列 这是因为至少有一列中有NA。请按如下方式修复: dataset = dataset[ , colSums(dataset != 0, na.rm = TRUE) > 0] 这是

我正在尝试删除数据框中仅包含值0的所有列。我的代码是我在这个网站上找到的

dataset = dataset[ ,colSums(dataset != 0) > 0]
但是,我不断返回一个错误:

[.data.frame(dataset,colSums(dataset!=0)>0)中出错:
选择未定义的列


这是因为至少有一列中有NA。请按如下方式修复:

dataset = dataset[ , colSums(dataset != 0, na.rm = TRUE) > 0]

这是因为至少有一列中有NA。请按如下方式修复:

dataset = dataset[ , colSums(dataset != 0, na.rm = TRUE) > 0]

下面的一些代码将检查哪些列是数字(或整数),并删除那些包含所有零和NAs的列:

# example data
df <- data.frame( 
        one = rep(0,100), 
        two = sample(letters, 100, T), 
        three = rep(0L,100), 
        four = 1:100,
        stringsAsFactors = F
      )

# create function that checks numeric columns for all zeros
only_zeros <- function(x) {
    if(class(x) %in% c("integer", "numeric")) {
        all(x == 0, na.rm = TRUE) 
    } else { 
        FALSE
    }
}

# apply that function to your data
df_without_zero_cols <- df[ , !sapply(df, only_zeros)]
#示例数据

df下面的一些代码将检查哪些列是数字(或整数),并删除那些包含所有零和NAs的列:

# example data
df <- data.frame( 
        one = rep(0,100), 
        two = sample(letters, 100, T), 
        three = rep(0L,100), 
        four = 1:100,
        stringsAsFactors = F
      )

# create function that checks numeric columns for all zeros
only_zeros <- function(x) {
    if(class(x) %in% c("integer", "numeric")) {
        all(x == 0, na.rm = TRUE) 
    } else { 
        FALSE
    }
}

# apply that function to your data
df_without_zero_cols <- df[ , !sapply(df, only_zeros)]
#示例数据

df使用
all()
还有一种替代方法:

对于大型数据集,通过引用删除列可以避免耗时和内存消耗的复制


还有一种替代方法是使用
all()

对于大型数据集,通过引用删除列可以避免耗时和内存消耗的复制


此尝试还返回一个错误dataset=dataset[,colSums(dataset!=10)dat
dat[,apply(dat,2,FUN=function(x)!all(x==0))]
没有导致发布未测试答案的问题。此尝试还返回一个错误dataset=dataset[,colSums](数据集!=10)dat
dat[,apply(dat,2,FUN=function(x)!all(x==0))]
没有导致未经测试的答案被发布的问题。
library(data.table)
cols <- which(sapply(dataset, function(x) all(x == 0)))
setDT(dataset)[, (cols) := NULL]
dataset

   a  c  d f
1: 1 -1 -1 a
2: 2  0 NA a
3: 3  1  1 a
dataset <- data.frame(a = 1:3, b = 0, c = -1:1, d = c(-1, NA, 1), e = 0, f ="a")
dataset
  a b  c  d e f
1 1 0 -1 -1 0 a
2 2 0  0 NA 0 a
3 3 0  1  1 0 a