56

使用时data.table是否可以返回除一列之外的所有列,例如data.frame

如果答案是否定的,是否有人有一种优雅的方式将多个时间序列转换data.table为一个zoo或其他时间序列对象?

考虑以下示例:

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))

没有我怎么办df = as.data.frame(dt)

4

2 回答 2

72

尝试with=FALSE

dt[,-1,with=FALSE]

顺便说一句,功能请求 #416 是相关的:

添加不加入 DT[-J(...)],而不是列 DT[,-"colC",with=FALSE]

于 2012-08-20T23:00:49.863 回答
2

以前的答案有效,但这是更新方法的答案:

## 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]])

作为扩展,如果您想从 中删除多个列data.table,请尝试以下操作之一:

dt[,-c('value1', ..myvar)]
dt[, .SD, .SDcols = !c('value1', (myvar))]
于 2021-01-30T22:40:17.120 回答