I do not know how you define "quick way," but as there is an "==" method for data frames (see ?"==" and links therein for details), that allows the straightforward use of basic R functionality:
## using your 'deck' and 'topCard' examples: > deck [ apply(deck == topCard[rep(1,nrow(deck)), ],1, all),] face suit value 1 king spades 13 > deck [ !apply(deck == topCard[rep(1,nrow(deck)),],1, all), ] face suit value 2 queen spades 12 3 jack spades 11 4 ten spades 10 > topCard <- deck[2, ] > deck [ !apply(deck == topCard[rep(1, nrow(deck)), ],1, all), ] face suit value 1 king spades 13 3 jack spades 11 4 ten spades 10 This approach can be trivially changed to using only a subset of columns to define the "filter." Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Thu, Jan 3, 2019 at 9:16 AM Benoit Galarneau <benoit.galarn...@polymtl.ca> wrote: > You are correct, the anti_join is working fine. > However, I still find it strange there is no "quick" way to find the > index of an item extracted from the data frame. > > This works as it returns the deck without the card no 10. > aCard = deck[10,] > cardNo = which(deck$value == aCard$value & deck$suit == aCard$suit) > deck[-cardNo,] > > But I'm still puzzled by the complexity of finding back the index of > the card with the long statement. > > Another approach that "works" is the following, but I still find it > strange to depend on data frame row names to find the index: > cardNo <- as.numeric(row.names(aCard)) > > Apologies if the above question are strange. I'm coming C++ world with > some bias with objects. Again, since "aCard" is extracted from the > data frame, I assume (bias?) there would be a simple way to find back > the item in the data frame it came frame. Some kind of indexOf() or > similar on the container and item. > > Benoit > > Ista Zahn <istaz...@gmail.com> a écrit : > > > Hi Benoit, > > > > You can select rows from deck matched in aCard using > > > > merge(deck, aCard) > > > > Selecting rows that don't match is bit more difficult. You could do > > something like > > > > isin <- apply(mapply(function(x, y) x %in% y, deck, topCard), > > 1, > > all) > > deck[!isin, ] > > > > perhaps. > > > > Alternatively, you can use anti_join from the dplyr package: > > > > library(dplyr) > > anti_join(deck, topCard) > > > > Best, > > Ista > > > > On Thu, Jan 3, 2019 at 10:38 AM Benoit Galarneau > > <benoit.galarn...@polymtl.ca> wrote: > >> > >> Hi everyone, > >> I'm new to the R world. > >> Probably a newbie question but I am stuck with some concept with data > frame. > >> I am following some examples in the "Hands-On Programming with R". > >> > >> In short, how can I access/filter items in a data frame using a > variable. > >> > >> One example consists of manipulating elements from a deck of card: > >> > >> > deck > >> face suit value > >> 1 king spades 13 > >> 2 queen spades 12 > >> 3 jack spades 11 > >> 4 ten spades 10 > >> etc. > >> > >> Let's say I want to remove or filter out the first card. I know I > >> could do deck[-1]. > >> > >> But let's say I have: topCard <- deck[1,] > >> > >> topCard is then a list of 3 elements > >> > topCard > >> face suit value > >> 1 king spades 13 > >> > >> My question is the following, how can I remove or filter out the deck > >> using the topCard variable. > >> > >> In my programmer's head, something similar to this should "work": > >> > deck[10,] > >> face suit value > >> 10 four spades 4 > >> > aCard <- deck[10,] > >> > aCard > >> face suit value > >> 10 four spades 4 > >> > deck[aCard] > >> Error in `[.default`(deck, aCard) : invalid subscript type 'list' > >> > >> Wihout having to specify all elements in the logical tests. > >> > >> deck[deck$face == aCard$face & deck$suit == aCard$suit & deck$value == > >> aCard$value,] > >> face suit value > >> 10 four spades 4 > >> > >> ______________________________________________ > >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >> https://stat.ethz.ch/mailman/listinfo/r-help > >> PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > >> and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.