[R] Extracting data using subset function

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Sun Feb 5 21:13:54 CET 2023


On 05/02/2023 2:59 p.m., Rolf Turner wrote:
> On Sun, 5 Feb 2023 19:37:03 +0530
> Upananda Pani <upananda.pani using gmail.com> wrote:
> 
>> Dear All,
>>
>> I want to create a vector p and extract first 20 observations using
>> subset function based on logical condition.
>>
>> My code is below
>>
>> p <- 0:100
>>
>> I know i can extract the first 20 observations using the following
>> command.
>>
>> q <- p[1:20]
>>
>> But I want to extract the first 20 observations using subset function
>> which requires a logical condition. I am not able to frame the
>> logical condition.
>>
>> The code should be
>>
>> q <- subset(p, logical condition)
>>
>> I am not able to do it. Please let me know what you think.
> 
> I think that you are manufacturing an unnecessary difficulty.  If you
> want the first 20 entries of p, use p[1:20]!!!
> 
> However, if you obdurately *insist* on using subset() you could do
> 
>      subset(p,(1:length(p)) <= 20)
> 
> This works, but makes a mountain out of a molehill.

Just to build the mountain a little higher, I would use

   subset(p, seq_along(p) <= 20)

You should generally avoid expressions like "1:length(p)", because they 
don't do what you would expect in the unusual case that p is length 0.

Even in cases where you know p is not length 0, it's a good habit to get 
into so that in the future you don't get surprised.

Duncan Murdoch



More information about the R-help mailing list