标识R中值等于0的行

时间:2019-03-16 22:07:01

标签: r dataframe dplyr subset

我正在尝试寻找一种方法来标识数据框中具有等于0的任何条目的列。如果该特定列的值等于0,我想创建一个新的数据框而没有包含零值。另外,我想创建一个保留列和删除列的列表。

Example:

    dataframe1:

Column1       Column2     Column3     Column4
    .03           .05         .07         .08
    .01           .09         .22         .39
      0           .56         .88         .56

    dataframe2:

Column1       Column2     Column3     Column4
    .03           .05         .07         .08
    .01           .09         .22         .39
      0           .56         .88         .56

   retainedColumns = 2, 3, 4
   removedColumns = 1

我认为这可以在dplyr中轻松完成。 至于创建新的数据框,我尝试执行代码(保持崩溃):

dataframe2<-dataframe1[!dataframe1 %in% 0, ] 

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

您可以执行以下操作。基本上,您是用colSums(df==0)将每列中的零数相加。之前的!排除所有零和之和不等于0的所有列。

df[!colSums(df==0)]

  Column2 Column3 Column4
1    0.05    0.07    0.08
2    0.09    0.22    0.39
3    0.56    0.88    0.56

这是如何获取保留和删除的列的列表:

retainedColumns <- which(!colSums(df==0)) 
#Column2 Column3 Column4 
#  2       3       4 

removedColumns <- which(colSums(df==0) > 0)
#Column1 
#  1 

#A double negation (!!) would also work here:
removedColumns <- which(!!colSums(df==0))

数据

df <- read.table(text="Column1 Column2 Column3 Column4
.03 .05 .07 .08
0 .09 .22 .39
0 .56 .88 .56", header=TRUE, stringsAsFactors=FALSE)