【问题标题】:Filter out a particular category过滤掉特定类别
【发布时间】:2014-09-01 16:26:50
【问题描述】:

这是一个示例数据集。

a <- structure(list(ID = c("A1", "A2", "A3", "A1", "A1", "A2", "A4", "A5", "A2", "A3"), 
Type = c("A", "B", "C", "A", "A", "A", "B", "B", "C", "B"), 
Alc = c("E", "F", "G", "E", "E", "E", "F", "F", "F", "F"), 
Com = c("Y", "N", "Y", "N", "Y", "Y", "Y", "N", "N", "Y")),
.Names = c("ID", "Type", "Alc", "Com"), row.names = c(NA, -10L), class = "data.frame")
a
   ID Type Alc Com
1  A1    A   E   Y
2  A2    B   F   N
3  A3    C   G   Y
4  A1    A   E   N
5  A1    A   E   Y
6  A2    A   E   Y
7  A4    B   F   Y
8  A5    B   F   N
9  A2    C   F   N
10 A3    B   F   Y

我想得到一个在 Alc 中没有“E”的数据集。我执行以下操作。

library(dplyr)
b <- filter(a, Alc=="G"| Alc=="F")
b
  ID Type Alc Com
1 A2    B   F   N
2 A3    C   G   Y
3 A4    B   F   Y
4 A5    B   F   N
5 A2    C   F   N
6 A3    B   F   Y

如果Alc中有很多类别,把所有类别都写下来很麻烦。我需要一个简单的解决方法。

感谢您的帮助。

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    您可以使用“不等于”运算符!=

    b <- filter(a, Alc!="E")
    

    【讨论】:

    • 我试过了;不知道当时发生了什么。现在可以了。
    • 请注意,%in% 在这种情况下也有帮助(例如 Alc %in% c("G","F")!(Alc %in% c("E"))
    【解决方案2】:

    试试:

    a[a$Alc!='E',]
       ID Type Alc Com
    2  A2    B   F   N
    3  A3    C   G   Y
    7  A4    B   F   Y
    8  A5    B   F   N
    9  A2    C   F   N
    10 A3    B   F   Y
    

    【讨论】:

      【解决方案3】:

      试试 subset(a,Alc $in$ c("G","F")),这是一种操作数据框对象的常用方法,以及标准的子集括号函数[ ]。另请查看?subsetdrop 参数。

      【讨论】:

      • 其实标准的方式大概是a[a$Alc != "E", ]
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2017-08-24
      • 1970-01-01
      • 2017-11-10
      • 2019-09-20
      • 2017-10-04
      • 1970-01-01
      相关资源
      最近更新 更多