r - dplyr::filter() 没有产生预期的输出

标签 r dataframe dplyr

请在下面找到我的数据 p

我不明白为什么 filter() 不起作用。我想过滤 p$treatment 不等于 SSTRp$who %in% 1:3

> table(p$who)

 1  2  3  4 
97 71 96 26 

#and 

> table(p$treatment)

   SSTR     SSA Control 
    119     131      40 

我已经申请了

p.ssa <- p %>% filter(!treatment=="SSTR",
                     who %in% 1:3) 

但我还是明白了

> table(p.ssa$who)

 1  2  3  4 
53 40 78  0 

# and

> table(p.ssa$treatment)

   SSTR     SSA Control 
      0     131      40 

预期的输出应该是

> table(p.ssa$who)

     1  2  3  
    53 40 78  

> table(p.ssa$treatment)

   SSA Control 
   131      40 

我的数据

    p <- structure(list(treatment = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 1L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("SSTR", 
    "SSA", "Control"), class = "factor"), who = structure(c(1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 3L, 2L, 1L, 3L, 1L, 1L, 
    1L, 1L, 1L, 1L, 2L, 4L, 4L, 1L, 4L, 1L, 2L, 1L, 4L, 1L, 1L, 1L, 
    1L, 2L, 1L, 1L, 2L, 1L, 4L, 1L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 
    4L, 4L, 1L, 4L, 4L, 2L, 1L, 2L, 2L, 4L, 4L, 4L, 2L, 4L, 1L, 4L, 
    4L, 2L, 4L, 4L, 3L, 4L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 3L, 
    2L, 2L, 2L, 3L, 2L, 3L, 1L, 2L, 3L, 3L, 3L, 1L, 2L, 1L, 2L, 3L, 
    3L, 1L, 4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 
    3L, 3L, 1L, 3L, 1L, 3L, 3L, 2L, 3L, 1L, 1L, 2L, 1L, 1L, 3L, 2L, 
    1L, 1L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 
    2L, 3L, 2L, 2L, 2L, 1L, 3L, 3L, 3L, 2L, 3L, 2L, 3L, 1L, 1L, 1L, 
    3L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 3L, 2L, 3L, 1L, 1L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 3L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 3L, 3L, 3L, 
    3L, 3L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 
    2L, 3L, 2L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L
    ), .Label = c("1", "2", "3", "4"), class = "factor")), class = "data.frame", row.names = c(NA, 
    -290L))

最佳答案

添加 droplevels 以删除数据中未使用的因子水平。

p.ssa <- p %>% filter(treatment !="SSTR",who %in% 1:3) %>% droplevels()

table(p.ssa$who)
# 1  2  3 
#53 40 78 

table(p.ssa$treatment)
#SSA Control 
#131      40 

关于r - dplyr::filter() 没有产生预期的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61028228/

相关文章:

r - 在多面州 map 上绘制县名称 (ggplot2)

regex - 正则表达式选择逗号但不在括号之间

r - 在 R levelplot 中更改 colorkey 图例中的字体

apache-spark - 带有点 '.' 的数据框的 pyspark 访问列

python - 使用Apply、Python 3.6从函数返回值更新数据框的多个字段

r - tidyr::expand() 用于跨组的单个列

r - 根据 data.frame 中的(组)值扩展 data.frame

r - 用一列过滤 R 数据框 - 保持数据框格式

python - Pandas 条件语句和添加列

r - Lintr - 有没有办法抑制大写数据框列名称警告?