[datatable-help] Subsetting that behaves right for both data frames and data.tables?

Timothée Carayol timothee.carayol at gmail.com
Wed Jul 20 14:21:10 CEST 2011


I guess another solution, which I don't expect to be much more satisfactory,
is something like:

"[.data.frame"(DT, c("a", "b")) (to return the columns "a" and "b", whether
DT is a data.table or a data.frame)

t



On Wed, Jul 20, 2011 at 1:06 PM, Chris Neff <caneff at gmail.com> wrote:

> I'm used to seeing the column names at the bottom of the column too, but
> that is only if the data.table is long enough. My example was too short for
> that, so I made the same sort of mistake you did :(
>
> Okay, that is a way, but is it a good way? Not sure...
>
>
> 2011/7/20 Timothée Carayol <timothee.carayol at gmail.com>
>
>> Sorry my mistake -- subset does return a data.table.
>> (I was using as an example a data.table with 100 rows, and stupidly using
>> the fact that it printed the whole thing rather than the 10 first rows only
>> as my criterion for whether it worked or not.. Omitting that
>> print.data.table does print up to 100 rows. I feel a bit stupid.)
>>
>> Why doesn't it work for you if that is the case?
>>
>> DF <- data.frame(a=1:200, b=1:10)
>> DT <- as.data.table(DF)
>> subDT <- subset(DT, select=a)
>> class(DT)
>> subDF <- subset(DF, select=a)
>> class(DF)
>> identical(as.data.frame(DT), DF)
>>
>>
>>
>> On Wed, Jul 20, 2011 at 12:50 PM, Chris Neff <caneff at gmail.com> wrote:
>>
>>> Yeah I realized that myself.
>>>
>>> Another one: the function "with" doesn't seem to do what I want... but at
>>> least it is consistent!
>>>
>>>
>>> 2011/7/20 Timothée Carayol <timothee.carayol at gmail.com>
>>>
>>>> Sorry --
>>>>
>>>> subset() was a poor idea, as it will return a data.frame even if the
>>>> argument is a data.table..
>>>>
>>>>
>>>>
>>>> 2011/7/20 Timothée Carayol <timothee.carayol at gmail.com>
>>>>
>>>>> Hi--
>>>>>
>>>>> You can use the subset() command with the select= option; not sure it's
>>>>> the best solution, though.
>>>>>
>>>>> Timothee
>>>>>
>>>>>
>>>>> On Wed, Jul 20, 2011 at 12:26 PM, Chris Neff <caneff at gmail.com> wrote:
>>>>>
>>>>>> I have a function where I pass a data frame and some variable names to
>>>>>> calculate statistics on. However, I am at a loss as to how to write it
>>>>>> correctly so that both data.frame and data.table work with it. If I have:
>>>>>>
>>>>>> DF = data.frame(x=1:10,y=2:11,z=3:12)
>>>>>>
>>>>>> DT = data.table(DF)
>>>>>>
>>>>>> var.names = c("x","y")
>>>>>>
>>>>>>
>>>>>> I can do the following things to subset:
>>>>>>
>>>>>> DT[,var.names,with=FALSE]
>>>>>> DF[,var.names]
>>>>>>
>>>>>>
>>>>>> but of course DT[,var.names] won't give me back what I want, and
>>>>>> DF[,var.names,with=FALSE] returns an error because with doesn't exist there.
>>>>>> So how do I do this?
>>>>>>
>>>>>> Thanks,
>>>>>> -Chris
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> datatable-help mailing list
>>>>>> datatable-help at lists.r-forge.r-project.org
>>>>>>
>>>>>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/datatable-help/attachments/20110720/ce14dd5b/attachment.htm>


More information about the datatable-help mailing list