How to exclude one column from data.table OR convert to data.table to MTS

Rdata.tableZoo

R Problem Overview


When using data.table is it possible to return all the columns except one, like in data.frame?

If the answer is no, does anyone have an elegant way to transform a multiple time series data.table to a zoo or other time series object?

Consider the following example:

library(data.table)
library(zoo)

## DEFINE DATA
set.seed(1)
dt = data.table(
    mydates = as.Date("2012-01-01") + 1:9, 
	value1 = sort(rpois(9, 6)),
	value2 = sort(rpois(9, 6)),
	value3 = sort(rpois(9, 6)),
	value4 = sort(rpois(9, 6)),
	value5 = sort(rpois(9, 6)))

## CONVERT TO DATA FRAME
df = as.data.frame(dt)

## CONVERT TO ZOO
zooObj = zoo(df[,-1], df$mydates)

## EXAMPLE OF DESIRED RESULTS
plot(zooObj, col=1:ncol(zooObj))

How would I do that without df = as.data.frame(dt)?

R Solutions


Solution 1 - R

Try with=FALSE :

dt[,-1,with=FALSE]

As an aside, feature request #416 is related :

Add not join DT[-J(...)], and not columns DT[,-"colC",with=FALSE].

Solution 2 - R

The previous answer works, but here is the answer with the updated methods:

## CONVERT TO ZOO

#### old method
zooObj = zoo(x=dt[,-1,with=FALSE], order.by=dt$mydates)

#### alternatives
zooObj = zoo(x=dt[,!'mydates'], order.by=dt$mydates)
zooObj = zoo(x=dt[,-'mydates'], order.by=dt$mydates)

#### and if column name is a variable
myvar = 'mydates'
zooObj = zoo(x=dt[,!..myvar], order.by=dt[[myvar]])
zooObj = zoo(x=dt[,-..myvar], order.by=dt[[myvar]])

As an extension, if you wanted to remove more than one column from the data.table, try one of the following:

dt[,-c('value1', ..myvar)]
dt[, .SD, .SDcols = !c('value1', (myvar))]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiongeneoramaView Question on Stackoverflow
Solution 1 - RMatt DowleView Answer on Stackoverflow
Solution 2 - RTMoView Answer on Stackoverflow