56

を使用する場合、 ?data.tableのように、1つを除くすべての列を返すことができます。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 に答える