使用管道和点子集数据框列

Subset data frame column using pipe and dot

我想学习如何正确使用“.”当使用 magrittr 进行子集化时。

给定一个数据框 myDataframe,

myDataFrame <- data.frame(c(1,2,3,3,3,4,5), c(10,11,12,13,14,15,16))
#  c.1..2..3..3..3..4..5. c.10..11..12..13..14..15..16.
#1                      1                            10
#2                      2                            11
#3                      3                            12
#4                      3                            13
#5                      3                            14
#6                      4                            15
#7                      5                            16

我想删除第一列中包含 3 的所有行,我可以使用 myDataFrame[ myDataFrame[,1] != 3 ,] 来获得此结果:

#  c.1..2..3..3..3..4..5. c.10..11..12..13..14..15..16.
#1                      1                            10
#2                      2                            11
#6                      4                            15
#7                      5                            16 

但是,我需要用管道来完成(而且我无法命名数据框的列)。

当我尝试 运行 myDataFrame %>% "[" (.[,1] != 3) 时,出现 "undefined columns selected" 错误。如何 select 数据框中的一列用点引用?

我们可以将其保存在 {} 中,即

myDataFrame %>% 
       {.[.[[1]] != 3,]}
#    c.1..2..3..3..3..4..5. c.10..11..12..13..14..15..16.
#1                      1                            10
#2                      2                            11
#6                      4                            15
#7                      5                            16

或扩展形式

myDataFrame %>% 
          {`[`(.[,1]) != 3} %>%
                        myDataFrame[.,]

dplyr 方法:

myDataFrame %>% 
  filter_at(vars(1), any_vars(. != 3))

如果您只给 [.data.frame 一个参数,它将用于子集列。

您只能添加一个字符并使您的表格有效:

myDataFrame %>% "[" (.[,1] != 3,)