【问题标题】:Delete rows with value frequencies lesser than x in R删除 R 中值频率小于 x 的行
【发布时间】:2016-01-05 16:15:25
【问题描述】:

我在 R 中得到了一个如下所示的数据框:

V1 V2 V3
1  2  3
1  43 54
2  34 53
3  34 51
3  43 42
...

我想删除 V1 的值频率低于 2 的所有行。因此在我的示例中,应删除 V1 = 2 的行,因为值“2”仅在列中出现一次(“1 " 和 "3" 各出现两次)。

我厌倦了添加一个频率为 V1 的额外列,以删除频率大于 1 的所有行,但以下我只在额外列中得到 NA。

data$Frequency <- table(data$V1)[data$V1]

谢谢

【问题讨论】:

    标签: r row apply frequency


    【解决方案1】:

    你可以试试这个:

    library(dplyr)
    df %>% group_by(V1) %>% filter(n() > 1)
    

    【讨论】:

      【解决方案2】:

      您也可以考虑使用 data.table。我们首先计算 V1 中每个值的出现次数,然后过滤大于 1 的出现次数。最后,我们删除不再需要的计数列。

      library(data.table)
      
      setDT(dat)
      dat2 <- dat[,n:=.N,V1][n>1,,][,n:=NULL]
      

      或者更快,感谢 RichardScriven:

      dat[, .I[.N >= 2], by = V1]
      > dat2
         V1 V2 V3
      1:  1  2  3
      2:  1 43 54
      3:  3 34 51
      4:  3 43 42
      

      【讨论】:

        【解决方案3】:

        这样你就不需要加载库了

        res<-data.frame(V1=c(1,1,2,3,3,3),V2=rnorm(6),V3=rnorm(6))
        res[res$V1%in%names(table(res$V1)>=2)[table(res$V1)>=2],]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-02
          • 1970-01-01
          • 1970-01-01
          • 2018-03-21
          • 1970-01-01
          • 2016-12-01
          相关资源
          最近更新 更多