Hi, I want to split a dataframe based on a grouping variable (in one column). The resulting new dataframes should be stored in a new variable. I tried to split the dataframe using split() and to store it using a FOR loop, but thats not working so far: df <- data.frame(A=c("A1","A1","A2","A2"),B=seq(1:4)) Fsplit <- function(x,y){ ls <- split(x,f=x$y) for (i in names(ls)){ i <- ls$i } } Fsplit(df,A) #1st argument is dataframe to split, 2nd argument grouping variable Any suggestions how to get that done? Best regards Johannes [[alternative HTML version deleted]]
On Feb 8, 2012, at 4:11 PM, Johannes Radinger wrote:> Hi, > > I want to split a dataframe based on a grouping variable (in one > column). The resulting new > dataframes should be stored in a new variable. I tried to split the > dataframe using split() and > to store it using a FOR loop, but thats not working so far: > > df <- data.frame(A=c("A1","A1","A2","A2"),B=seq(1:4)) > > Fsplit <- function(x,y){ > ls <- split(x,f=x$y) > for (i in names(ls)){ > i <- ls$i > } > } > > Fsplit(df,A) #1st argument is dataframe to split, 2nd argument > grouping variable >It appears you want the name of the levels of df$A to be the names of separate variables in the global environment. If that is correct, then see the FAQ. I'm not sure which one it is among the Miscellaneous section, but you should be looking of the one that tells you how to construct a named variable. Or: ? assign -- David Winsemius, MD West Hartford, CT
I think one of your problems (the others have been addressed by others) is that you want the expression x$y to represent a column of x whose name is stored in y (not the name y itself). The problem here is that the $ notation is a magical shortcut and like any other magic if used incorrectly is likely to do the programmatic equivalent of turning yourself into a toad. It is better to use '[[' instead of the shortcut, try replacing x$y with x[[y]] and see if that fixes that problem. On Wed, Feb 8, 2012 at 2:11 PM, Johannes Radinger <JRadinger at gmx.at> wrote:> Hi, > > I want to split a dataframe based on a grouping variable (in one column). The resulting new > dataframes should be stored in a new variable. I tried to split the dataframe using split() and > to store it using a FOR loop, but thats not working so far: > > df <- data.frame(A=c("A1","A1","A2","A2"),B=seq(1:4)) > > Fsplit <- function(x,y){ > ? ? ? ?ls <- split(x,f=x$y) > ? ? ? ?for (i in names(ls)){ > ? ? ? ? ? ? ? ?i <- ls$i > ? ? ? ?} > } > > Fsplit(df,A) #1st argument is dataframe to split, 2nd argument grouping variable > > > Any suggestions how to get that done? > > Best regards > Johannes > ? ? ? ?[[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.-- Gregory (Greg) L. Snow Ph.D. 538280 at gmail.com