R/dplyr: Как использовать функции фильтра в сочетании с конвейерным оператором %›%?

Я уверен, что для этого есть идиома, но как именно мне передать логическую маску или выбор строки в операцию фильтра с помощью dplyr.

Например, здесь я хочу выделить строки foo, для которых дублируется идентификатор:

foo$id %>% duplicated %>% filter(foo ??)

Я могу сделать это с помощью анонимной функции, но должен быть лучший способ, чем:

foo$id %>% duplicated %>% function(x) foo[x,]

person daj    schedule 25.07.2014    source источник
comment
Не могли бы вы использовать foo %>% filter(duplicated(id)) вместо этого?   -  person talat    schedule 25.07.2014
comment
Не могли бы вы предоставить foo, чтобы сделать это минимальным рабочим кодом, иначе это основание для закрытия вопроса?   -  person Tyler Rinker    schedule 25.07.2014


Ответы (1)


Проблема в том, что вы пытаетесь отправить вектор по каналу, когда dplyr действительно предназначен для использования с табличными объектами, поэтому вы должны отправлять весь data.frame (при условии, что это то, что foo. Например

library(dplyr)
foo <- data.frame(id=sample(1:5, 25, replace=T), val=runif(25))
foo %>% filter(!duplicated(id))

Если вам действительно нужны только идентификаторы, добавьте

foo %>% filter(!duplicated(id)) %>% select(id)
person MrFlick    schedule 25.07.2014