使用dplyr过滤R中的因子水平

Med*_*ist 11 r dplyr

这是我的数据框DF的一瞥():

Observations: 221184
Variables:
$ Epsilon    (fctr) 96002.txt, 96002.txt, 96004.txt, 96004.txt, 96005.txt, 960...
$ Value   (int) 61914, 61887, 61680, 61649, 61776, 61800, 61753, 61725, 616...
Run Code Online (Sandbox Code Playgroud)

我想使用dplyr过滤(删除)Epsilon前两个级别的所有观察结果.

我的意思是:

DF %>% filter(Epsilon != "96002.txt" & Epsilon != "96004.txt")
Run Code Online (Sandbox Code Playgroud)

但是,我不想使用字符串值(即"96002.txt"和"96004.txt")而是使用级别顺序(即1和2),因为它应该是一个独立于级别的通用指令值.

nic*_*ola 18

您可以轻松地转换factor成一个integer,然后用它的条件.只需将您的filter声明替换为:

 filter(as.integer(Epsilon)>2)
Run Code Online (Sandbox Code Playgroud)

更一般地说,如果你想要消除索引级别的向量,你可以尝试:

 #some random levels we don't want
 nonWantedLevels<-c(5,6,9,12,13)
 #just the filter part
 filter(!as.integer(Epsilon) %in% nonWantedLevels)
Run Code Online (Sandbox Code Playgroud)

  • 效率稍微高一些,因为“factor”内部是“integer”,而“numeric”则强制为浮点值。 (3认同)