R 删除具有0'的列;s

R 删除具有0'的列;s,r,R,我正在尝试删除数据帧df中的列,该数据帧的语法为0,下面是我的语法 df_new<-df[,which(colSums(df) !=0)] df_new这应该行得通 df[,sapply(df,function(V) sum(V==0)==0)] 编辑 上面的代码自然应该适用于所有数字列,但是对于因子列或字符列,如果是“0”,我们会有相同的预期行为吗?我们可以做一些测试: factor(letters[1:5]) == 0 # FALSE FALSE FALSE FALSE FALSE

我正在尝试删除数据帧
df
中的列,该数据帧的语法为0,下面是我的语法

df_new<-df[,which(colSums(df) !=0)]
df_new这应该行得通

df[,sapply(df,function(V) sum(V==0)==0)]
编辑

上面的代码自然应该适用于所有数字列,但是对于因子列或字符列,如果是“0”,我们会有相同的预期行为吗?我们可以做一些测试:

factor(letters[1:5]) == 0
# FALSE FALSE FALSE FALSE FALSE

factor(c(0:5)) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
as.character(c(0:5)) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE

c(0,letters[1:5]) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
factor(c(0,letters[1:5])) == 0
# TRUE FALSE FALSE FALSE FALSE FALSE
发生的情况是,R将RHS上的
0
(数字)转换为
“0”
(字符),并将LHS上的因子列转换为字符。因此,如果您真的想删除任何带有“0”的列,无论它是数字还是字符,那么代码通常都可以正常工作。但是,如果目的是始终保留字符或因子列,那么类似的内容可能会有所帮助

  df[,sapply(df,function(V) sum(V==0)==0 | is.character(V) | is.factor(V))]

df
中,有些列不是数字。在应用
colSums
之前,需要删除它们。要检查
df
中的列类别,请执行
str(df)
并忽略本质上不是数字的列。也许:您有一个factor列