[R] Accessing Data Frame
Bert Gunter
bgunter@4567 @ending from gm@il@com
Thu Jan 3 21:10:06 CET 2019
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.galarneau using 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 <istazahn using 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.galarneau using 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 using 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 using 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]]
More information about the R-help
mailing list