使用管道和点

时间:2018-02-21 13:43:08

标签: r dataframe pipe subset magrittr

我想学习如何正确使用“。”当用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)时,我收到“未定义列选择”错误。如何在用点引用的数据框中选择一列?

3 个答案:

答案 0 :(得分:2)

dplyr方法:

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

答案 1 :(得分:1)

我们可以将它保存在{}

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[.,]

答案 2 :(得分:1)

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

您只能添加一个字符并使表单正常工作:

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