私はdata.tableのドキュメントを理解しようとしていますが、次のことに関する私の推論が間違っている場合は、フィードバックを求めたいと思います.
(1) data.table から列の範囲を選択して、新しい data.table を作成したいと考えています。
(2) また、各グループの最初の値だけを取得したいと思います。最初の質問に関しては、答えはここにあると思いますが、次に列番号に関してです。しかし、列名を使用したいと思います。これは、data.table の主な強み (およびセールス ポイント) の 1 つだと思います。
データセットの例を次に示します。
DT <- data.table(ID=c(101,101,101,102,103,104,104),
"year.1" = c(1,5,3,2,3,4,8),
"year.2" = c(4,5,6,NA,1,2,3),
"year.3" = c(1,2,3,7,9,8,0),
"year.4" = c(4,5,NA,1,2,6,9))
setkey(DT,ID)
実際には、「年」だけでなく、もっと多くの列があります。
# ALL OF THESE DONT WORK AND END IN ERRORS
# To extract a range of columns I have tried this:
dt.sub <- DT[,list(year.1:year.3,ID)]
dt.sub <- DT[,c("year.1":"year.3",ID), with=FALSE] # I know shouldn't work since
# "with=FALSE" is only intended in combination with := according to the documentation
dt.sub <- DT[,lapply(SD),.SDcols= for (i in 1:3) paste0("year.",i) ]
2 番目の質問: dt.sub に各グループの最初の観測のみを含めたい場合は、"mult" 引数を使用できると思います。ただし、これは私が予想するものとは異なる方法でも機能します。1 つの列だけで例を使用すると、次のようになります。
dt.sub1 <- DT[,year.1, by=ID,mult="first",]
これはエラーを提供しませんが、グループの最初の行を提供するだけではありません。次のような回避策があることを知っています:
dt.sub1 <- unique(DT[,year.1, by=ID])
期待される出力を提供しますが、オプションで重要なものが欠けているように感じmult
ます。