[R] Erase content of dataframe in a single stroke

Dénes Tóth toth@dene@ @end|ng |rom kogentum@hu
Thu Sep 27 12:12:59 CEST 2018


Hi Luigi,

Actually I doubt that the original problem you try to solve requires the 
initialization of an empty data.frame with a particular structure. 
However, if you think you really need this step, I would write a 
function for it and also consider edge cases.

getSkeleton <- function(x, drop_levels = FALSE) {
   out <- x[numeric(0L), , drop = FALSE]
   if (isTRUE(drop_levels)) out <- droplevels(out)
   out
}

Note that it retains or drops factor levels depending on 'drop_levels'. 
It only matters if you have factors in your data.frame.
'drop = FALSE' is required to guard against silent conversion to a 
vector if 'x' has only one column.

Regards,
Denes



On 09/27/2018 11:11 AM, Jan van der Laan wrote:
> Or
> 
> testdf <- testdf[FALSE, ]
> 
> or
> 
> testdf <- testdf[numeric(0), ]
> 
> which seems to be slightly faster.
> 
> Best,
> Jan
> 
> 
> Op 27-9-2018 om 10:32 schreef PIKAL Petr:
>> Hm
>>
>> I would use
>>
>>> testdf<-data.frame(A=c(1,2),B=c(2,3),C=c(3,4))
>>> str(testdf)
>> 'data.frame':   2 obs. of  3 variables:
>>   $ A: num  1 2
>>   $ B: num  2 3
>>   $ C: num  3 4
>>> testdf<-testdf[-(1:nrow(testdf)),]
>>> str(testdf)
>> 'data.frame':   0 obs. of  3 variables:
>>   $ A: num
>>   $ B: num
>>   $ C: num
>>
>> Cheers
>> Petr
>>
>>> -----Original Message-----
>>> From: R-help <r-help-bounces using r-project.org> On Behalf Of Jim Lemon
>>> Sent: Thursday, September 27, 2018 10:12 AM
>>> To: Luigi Marongiu <marongiu.luigi using gmail.com>; r-help mailing list 
>>> <r-help using r-
>>> project.org>
>>> Subject: Re: [R] Erase content of dataframe in a single stroke
>>>
>>> Ah, yes, try 'as.data.frame" on it.
>>>
>>> Jim
>>>
>>> On Thu, Sep 27, 2018 at 6:00 PM Luigi Marongiu 
>>> <marongiu.luigi using gmail.com>
>>> wrote:
>>>> Thank you Jim,
>>>> this requires the definition of an ad hoc function; strange that R
>>>> does not have a function for this purpose...
>>>> Anyway, it works but it changes the structure of the data. By
>>>> redefining the dataframe as I did, I obtain:
>>>>
>>>>> df
>>>> [1] A B C
>>>> <0 rows> (or 0-length row.names)
>>>>> str(df)
>>>> 'data.frame': 0 obs. of  3 variables:
>>>>   $ A: num
>>>>   $ B: num
>>>>   $ C: num
>>>>
>>>> When applying your function, I get:
>>>>
>>>>> df
>>>> $A
>>>> NULL
>>>>
>>>> $B
>>>> NULL
>>>>
>>>> $C
>>>> NULL
>>>>
>>>>> str(df)
>>>> List of 3
>>>>   $ A: NULL
>>>>   $ B: NULL
>>>>   $ C: NULL
>>>>
>>>> The dataframe has become a list. Would that affect downstream
>>> applications?
>>>> Thank you,
>>>> Luigi
>>>> On Thu, Sep 27, 2018 at 9:45 AM Jim Lemon <drjimlemon using gmail.com>
>>> wrote:
>>>>> Hi Luigi,
>>>>> Maybe this:
>>>>>
>>>>> testdf<-data.frame(A=1,B=2,C=3)
>>>>>> testdf
>>>>>   A B C
>>>>> 1 1 2 3
>>>>> toNull<-function(x) return(NULL)
>>>>> testdf<-sapply(testdf,toNull)
>>>>>
>>>>> Jim
>>>>> On Thu, Sep 27, 2018 at 5:29 PM Luigi Marongiu
>>> <marongiu.luigi using gmail.com> wrote:
>>>>>> Dear all,
>>>>>> I would like to erase the content of a dataframe -- but not the
>>>>>> dataframe itself -- in a simple and fast way.
>>>>>> At the moment I do that by re-defining the dataframe itself in 
>>>>>> this way:
>>>>>>
>>>>>>> df <- data.frame(A = numeric(),
>>>>>> +                   B = numeric(),
>>>>>> +                   C = character())
>>>>>>> # assign
>>>>>>> A <- 5
>>>>>>> B <- 0.6
>>>>>>> C <- 103
>>>>>>> # load
>>>>>>> R <- cbind(A, B, C)
>>>>>>> df <- rbind(df, R)
>>>>>>> df
>>>>>>    A   B   C
>>>>>> 1 5 0.6 103
>>>>>>> # erase
>>>>>>> df <- data.frame(A = numeric(),
>>>>>> +                  B = numeric(),
>>>>>> +                  C = character())
>>>>>>> df
>>>>>> [1] A B C
>>>>>> <0 rows> (or 0-length row.names)
>>>>>> Is there a way to erase the content of the dataframe in a simplier
>>>>>> (acting on all the dataframe at once instead of naming each column
>>>>>> individually) and nicer (with a specific erasure command instead
>>>>>> of re-defyining the object itself) way?
>>>>>>
>>>>>> Thank you.
>>>>>> -- 
>>>>>> Best regards,
>>>>>> Luigi
>>>>>>
>>>>>> ______________________________________________
>>>>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>>>> 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.
>>>>
>>>>
>>>> -- 
>>>> Best regards,
>>>> Luigi
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> 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.
>> Osobní údaje: Informace o zpracování a ochraně osobních údajů 
>> obchodních partnerů PRECHEZA a.s. jsou zveřejněny na: 
>> https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information 
>> about processing and protection of business partner’s personal data 
>> are available on website: 
>> https://www.precheza.cz/en/personal-data-protection-principles/
>> Důvěrnost: Tento e-mail a jakékoliv k němu připojené dokumenty jsou 
>> důvěrné a podléhají tomuto právně závaznému prohláąení o vyloučení 
>> odpovědnosti: https://www.precheza.cz/01-dovetek/ | This email and any 
>> documents attached to it may be confidential and are subject to the 
>> legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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