[R] Accessing Data Frame

Duncan Murdoch murdoch@dunc@n @ending from gm@il@com
Thu Jan 3 19:26:33 CET 2019


On 03/01/2019 12:39 p.m., Benoit Galarneau wrote:
> Thanks for the feedback.
> Point taken about the data.table package, I will take a look for sure.
> As I am new to the R programming, I'm exploring with the default
> libraries as a start.
> 
> I have various options that works like this one:
> 
> topCard <- deck[1,]
> #Remove card from deck using row name
> deck <- deck[!rownames(deck) %in% row.names(topCard),]
> 
> Is it recommended/safe/good practice to work on items using the item names?

I forgot to address "safety".  Your code above will only be safe if you 
can guarantee that topCard is always produced by subsetting the deck. 
If a user does something like

topCard <- data.frame(face = "queen", suit = "spades", value = 12)

then the rownames won't match, and removing topCard will remove the 
wrong one.

Duncan Murdoch

> 
> Benoit
> 
> Jeff Newmiller <jdnewmil using dcn.davis.ca.us> a écrit :
> 
>>> In my programmer's head, something similar to this should "work": ...
>>> deck[aCard]
>>
>> There are some people who agree with you... see the data.table
>> package, which can be made to behave like this.
>>
>> Keep in mind that the aCard data frame in general may have a
>> different set of column names or more than one row. (I would be
>> concerned that the logic of your application was inefficiently
>> designed if `deck` actually has the same columns as `aCard` as in
>> your example.) Others have pointed out that data frames are
>> typically combined using the merge function, which allows matching
>> columns to be specified very flexibly.
>>
>>
>> On January 3, 2019 6:50:22 AM PST, 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.
>>
>> --
>> Sent from my phone. Please excuse my brevity.
> 
> ______________________________________________
> 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.
>



More information about the R-help mailing list