[R] Doing a Task Without Using a For Loop

Tom La Bone booboo at gforcecable.com
Tue Oct 14 17:22:40 CEST 2008


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.



More information about the R-help mailing list