[R] nested looping functions and dataframes
Phil Spector
spector at stat.berkeley.edu
Tue Mar 16 17:50:27 CET 2010
Lanna -
Here's one way:
makeframe = function(x){
b = as.data.frame(as.matrix(table(x$Species,x$Species)))
b = b[!(b$Var1 == b$Var2),-3]
data.frame(Year=x$Year[1],Location=x$Location[1],b)
}
result = lapply(split(x,list(x$Year,x$Location)),makeframe)
result will be a list of data frames, one for each
Year/Location combination. You can find the data frame
for a particular Year/Location combination as
Year = 1998
Location = 'PIPE_7'
result[[paste(Year,Location,sep='.')]]
Hope this helps.
- Phil Spector
Statistical Computing Facility
Department of Statistics
UC Berkeley
spector at stat.berkeley.edu
On Tue, 16 Mar 2010, Lanna Jin wrote:
>
> Hey All,
>
> So, I am confused how exactly to use nesting loop functions in R to spit out
> data frames. I've managed to create a working function for my data set that
> generates a data frame for a given set of Year i and Location j; but how
> would I do it for all Years and Locations?
>
> Here is my working function:
>
> test<-function(i,j){
> a<-x[which(x$Year==i & x$Location==j),]
> b<-as.data.frame(as.matrix(table(a$Species,a$Species)))
> c<-b[-which(b$Var1==b$Var2),-3]
> c$Year<-i; c$Location<-j
> return(c)
> }
>
> Where, x is a dataframe that looks like the following:
>
>> head(x,n=20)
> Year Location Species
> 66 1998 PIPE_7 ACMI2
> 67 1998 PIPE_7 AMAR2
> 68 1998 PIPE_7 AMCA6
> 69 1998 PIPE_7 ANCY
> 70 1998 PIPE_7 ASVE
> 71 1998 PIPE_7 BOCU
> 72 1998 PIPE_7 CIFL
> 73 1998 PIPE_7 DAPU5
> 74 1998 PIPE_7 DICHANTHEL
> 75 1998 PIPE_7 GABO2
> 76 1998 PIPE_7 HEHE5
> 77 1998 PIPE_7 LIAS
> 78 1998 PIPE_7 LIPY
> 79 1998 PIPE_7 PAVI2
> 80 1998 PIPE_7 PHPI
> 81 1998 PIPE_7 PHVI5
> 82 1998 PIPE_7 RAPI
> 83 1998 PIPE_7 SOCA6
> 84 1998 PIPE_7 VIPE2
> 85 1998 PIPE_7 ZIAU
>
> and when feeding x into my function "test" with the parameters i = 1998 and
> j = "PIPE_7", I get the following dataframe, c:
>
>> head(test(1998,"PIPE_7"),n=20)
> Var1 Var2 Year Location
> 2 AMAR2 ACMI2 1998 PIPE_7
> 3 AMCA6 ACMI2 1998 PIPE_7
> 4 ANCY ACMI2 1998 PIPE_7
> 5 ASVE ACMI2 1998 PIPE_7
> 6 BOCU ACMI2 1998 PIPE_7
> 7 CIFL ACMI2 1998 PIPE_7
> 8 DAPU5 ACMI2 1998 PIPE_7
> 9 DICHANTHEL ACMI2 1998 PIPE_7
> 10 GABO2 ACMI2 1998 PIPE_7
> 11 HEHE5 ACMI2 1998 PIPE_7
> 12 LIAS ACMI2 1998 PIPE_7
> 13 LIPY ACMI2 1998 PIPE_7
> 14 PAVI2 ACMI2 1998 PIPE_7
> 15 PHPI ACMI2 1998 PIPE_7
> 16 PHVI5 ACMI2 1998 PIPE_7
> 17 RAPI ACMI2 1998 PIPE_7
> 18 SOCA6 ACMI2 1998 PIPE_7
> 19 VIPE2 ACMI2 1998 PIPE_7
> 20 ZIAU ACMI2 1998 PIPE_7
> 21 ACMI2 AMAR2 1998 PIPE_7
>
>
> I have searched through the R-help archives for hints, which have not been
> successful in answering my question. As a new user to R and programming
> languages, I truly appreciate your help and thank you for your patience.
>
> Thanks in advance for your response,
> Lanna Jin
>
> -----
> Lanna Jin
>
> lannajin at gmail.com
> 510-898-8525
> --
> View this message in context: http://n4.nabble.com/nested-looping-functions-and-dataframes-tp1595166p1595166.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.
>
More information about the R-help
mailing list