私は数値と文字の両方の変数に作用するこの2段階プロセスdata.table
を単純化しようとしています。例えば。 - 数字変数のそれぞれのtextvar
とsum
の最初の要素を取る。この小さな例を考えてみましょう:data.table数値とテキストの変数を別々にグループ化する
library(data.table)
dt <- data.table(grpvar=letters[c(1,1,2)], textvar=c("one","two","one"),
numvar=1:3, othernum=2:4)
dt
# grpvar textvar numvar othernum
#1: a one 1 2
#2: a two 2 3
#3: b one 3 4
今私の最初に考えたのはlapply
コールのうちの一つの変数を削除するには巣.SD
にいたが、私はそれは少し複雑だと思った:
dt[, c(textvar=textvar[1], .SD[, lapply(.SD, sum), .SDcols=-c("textvar")]), by=grpvar]
# grpvar textvar numvar othernum
#1: a one 3 5
#2: b one 3 4
それから私は思いました多分私は、それぞれ個別にグループ化を行うと、それらを結合、それはさらに悪いようだ可能性:
dt[, .(textvar=textvar[1]), by=grpvar][
dt[, lapply(.SD, sum), by=grpvar, .SDcols=-c("textvar")], on="grpvar"
]
# grpvar textvar numvar othernum
#1: a one 3 5
#2: b one 3 4
は周りになるだろう単純な構造があります.SD
のネスティングまたは参加?私は何か初心者を見下ろすような気がする。
私は1.9.6になっており、後ほどアップグレードする立場にはいないが、すぐにお返事いただきありがとうございます。だから1.9.7は、 "オブジェクト 'textvar' not found"エラーを避けるでしょうか? – thelatemail
@thelatemail、はい。これは、このリリースで最終的に修正することができた長い間の(そして迷惑な)エラーでした。[#495](https://github.com/Rdatatable/data.table/issues/495)。 – Arun
awesome、聞いて良かった:-) – thelatemail