为什么我已经过滤了数据框列中的两个额外值?

时间:2017-10-21 22:13:46

标签: r dataframe

我正在尝试选择其标签列的值等于'unreg'的行,所以我这样做:

df =df[df$label == 'unreg',]

所以我假设当我得到这个列的值时,它应该只是'ureg',但是:

table(df$label)

显示

20170131 20170224    unreg 
   0        0        0   1000 

为什么它显示频率为0的这两个额外值(20170131和20170224)?

1 个答案:

答案 0 :(得分:0)

让我把它写成一个正式的答案:让我们尝试创建一个最小的例子。

library(tidyverse)
library(magrittr)
label <- c("20170131", "20170224", "unreg", "ureg")
df <- data_frame(label)
df %<>% 
  mutate(label = 
    factor(label, levels = label) # The vector label, not the column
  )

在此之后,你会看到

> class(df$label)
[1] "factor"
> df$labels
[1] 20170131 20170224 unreg    ureg    
Levels: 20170131 20170224 unreg ureg

让我们按照您的建议尝试执行以下操作:

> df =df[df$labels == 'unreg',]
> table(df$labels)
20170131 20170224    unreg     ureg 
       0        0        1        0 

为了摆脱现在不存在的因素水平,我们可以简单地

df %<>% mutate(labels = factor(labels))

然后你看到了

> table(df$labels)
unreg 
    1 

当然,您可能希望重新定义自己的关卡/标签。 如果这不能解决,或者这不是你的想法,请告诉我。