[R] Split dataframe into new dataframes

R. Michael Weylandt michael.weylandt at gmail.com
Thu Feb 9 02:59:22 CET 2012


You can of course make your own function to do this all "in one step"

split2env <- function(x, f, drop = FALSE, ...){
     list2env(split(x, f, drop), ...)
}

But why do you need this for other tasks as a one-liner?

M


On Wed, Feb 8, 2012 at 6:29 PM, Johannes Radinger <Jradinger at gmx.at> wrote:
>
> Am 08.02.2012 um 23:47 schrieb David Winsemius:
>
>>
>> On Feb 8, 2012, at 5:06 PM, Johannes Radinger wrote:
>>
>>>
>>> Am 08.02.2012 um 22:19 schrieb David Winsemius:
>>>
>>>>
>>>> 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.
>>>>
>>>
>>> Your hint with the global environment brought me on track. It seems that I this task can be done with list2env() although there is still a problem with my function. How
>>> can I parse the name of the dataframe and the column name in the function...
>>>
>>> df <- data.frame(A=c("A1","A1","A2","A2"),B=seq(1:4))
>>>
>>> Fsplit <- function(x,y){
>>>      ls <- split(x,f=x$y)
>>>      list2env(ls,envir = .GlobalEnv)
>>> }
>>>
>>> Fsplit(df,A)
>>
>> I still have not figured out what you really want to do. The simple answer to what you ask for in your written request is simply:
>>
>> dfvar <- split(df, df$A)
>>
>> So what is it about that result that is not useful for your (as yet unstated)  destination?
>>
>> > split(df, df$A)
>> $A1
>>    A B
>> 1 A1 1
>> 2 A1 2
>>
>> $A2
>>    A B
>> 3 A2 3
>> 4 A2 4
>>
>>
>
> Sorry for not being clear enough, and your are
> right as "split(df, df$A)" is what I want. Additionally I want to store afterwards
> the single objects of the list in new dataframes
> where variable name = name of list object (which can be done with list2env()).
> Is that clear enough so far?
>
> What I want exactly is to express that two operations (split, list2env) within
> one function. I need the function for other tasks in R.
>
> /johannes
>
>>
>>
>>
>>>
>>> /johannes
>>>
>>>> Or:
>>>>
>>>> ? assign
>>>>
>>>> --
>>>> David Winsemius, MD
>>>> West Hartford, CT
>>>>
>>>
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>
>
>        [[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