[R] Doing a Task Without Using a For Loop

Avram Aelony aavram at mac.com
Tue Oct 14 18:48:48 CEST 2008



or perhaps...

> data1$NinYear <- with(data1, ave(ID, Year, FUN = length))


 > unique(data1)
     ID Year NinYear
1  209 1971       2
3  213 1951       2
5  213 1953      20
20 213 1954      11
31 213 1955       2
33 234 1953      20
38 234 1958       2
40 234 1965       3
43 249 1952       2


Avram



On Oct 14, 2008, at 9:04 AM, Henrique Dallazuanna wrote:

> Is this what you want?
>
> data1$NinYear <- with(data1, ave(ID, Year, FUN = length))
>
> On Tue, Oct 14, 2008 at 12:22 PM, Tom La Bone  
> <booboo at gforcecable.com>wrote:
>
>>
>> The table function, which I was unaware of, works great. However,  
>> I still
>> don't see how to assign the values calculated with table to data1 
>> $NinYear
>> without using a loop.
>>
>> Tom
>>
>>
>>
>>
>> Henrique Dallazuanna wrote:
>>>
>>> Try this:
>>>
>>> with(data1, table(ID, Year))
>>>
>>> On Tue, Oct 14, 2008 at 10:58 AM, Tom La Bone
>>> <booboo at gforcecable.com>wrote:
>>>
>>>>
>>>> Assume that I have the dataframe "data1", which is listed at the  
>>>> end of
>>>> this
>>>> message. I want count the number of lines that each person has  
>>>> for each
>>>> year. For example, the person with ID=213 has 15 entries  
>>>> (NinYear) for
>>>> 1953.
>>>> The following bit of code calculates NinYear:
>>>>
>>>> for (i in 1:length(data1$ID)) {
>>>>  data1$NinYear[i] <- length(data1[data1$Year==data1$Year[i] &
>>>>    data1$ID==data1$ID[i],1]) }
>>>>
>>>> This seems to work but is horribly slow (some files I am working  
>>>> with
>>>> have
>>>> over 500,000 lines). Can anyone suggest a faster way of doing this,
>>>> perhaps
>>>> a way that does not use a for loop? Thanks.
>>>>
>>>> Tom
>>>>
>>>> ID      Year    NinYear
>>>> 209     1971    0
>>>> 209     1971    0
>>>> 213     1951    0
>>>> 213     1951    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1953    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1954    0
>>>> 213     1955    0
>>>> 213     1955    0
>>>> 234     1953    0
>>>> 234     1953    0
>>>> 234     1953    0
>>>> 234     1953    0
>>>> 234     1953    0
>>>> 234     1958    0
>>>> 234     1958    0
>>>> 234     1965    0
>>>> 234     1965    0
>>>> 234     1965    0
>>>> 249     1952    0
>>>> 249     1952    0
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>>
>> http://www.nabble.com/Doing-a-Task-Without-Using-a-For-Loop- 
>> tp19974078p19974078.html
>>>> Sent from the R help mailing list archive at Nabble.com.
>>>>
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list
>>>> 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.
>>>>
>>>
>>>
>>>
>>> --
>>> Henrique Dallazuanna
>>> Curitiba-Paraná-Brasil
>>> 25° 25' 40" S 49° 16' 22" O
>>>
>>>       [[alternative HTML version deleted]]
>>>
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> 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.
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Doing-a-Task-Without-Using-a-For-Loop- 
>> tp19974078p19975745.html
>> Sent from the R help mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> 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.
>>
>
>
>
> -- 
> Henrique Dallazuanna
> Curitiba-Paraná-Brasil
> 25° 25' 40" S 49° 16' 22" O
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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