6
グループ化変数by
で変数.SDcols
を変えることはできますか?私は次のような状況にあります。.SDcols
を毎年異なる列に変更したいと思っています。 .SDcols
の値は1つのdata.tableにありますが、これらの値を使用して別のテーブルの.SD
に関数を適用しようとしています。値を更新しながら、.SDcolsをdata.table内のグループ変数で変更できるようにします。
それはあなただけのシンプルを探しているように私には思える私は明白なアプローチを逃すと、この間違っているのですが、これは私がしようとしたもので、
## Contains the .SDcols applicable to each year
dat1 <- data.table(
year = 1:4,
vals = lapply(1:4, function(i) letters[1:i])
)
## Make the sample data (with NAs)
set.seed(1775)
dat2 <- data.table(year = sample(1:4, 10, TRUE))
dat2[, letters[1:4] := replicate(4, sample(c(NA, 1:5), 10, TRUE), simplify=FALSE)]
## Goal: Sum up the columns in the corresponding .SDcols for each year
## Attempt, doesn't work -- I think b/c .SDcols must be fixed?
dat2[, SUM := rowSums(.SD, na.rm=TRUE), by=year,
.SDcols=unlist(dat1[year == .BY[[1]], vals])]
## Desired result, by simply iterating through each possible year
for (i in 1:4) {
dat2[year==i, SUM := rowSums(.SD, na.rm=TRUE),
.SDcols=unlist(dat1[year == i, vals])]
}
dat2[]
# year a b c d SUM
# 1: 1 3 1 5 1 3
# 2: 2 1 3 3 1 4
# 3: 1 5 4 3 NA 5
# 4: 4 1 NA 4 5 10
# 5: 2 2 2 2 NA 4
# 6: 2 NA 3 3 NA 3
# 7: 4 2 3 2 NA 7
# 8: 1 2 NA 5 4 2
# 9: 2 3 3 5 1 6
# 10: 3 NA 4 2 NA 6
'非公開に(i.vals)は'私は困惑していたものだった
Reduce
を使用することになりますが。私はこれが '.EACHI'問題だと確信していました。 +1 – A5C1D2H2I1M1N2O1R2T1@AnandaMahto 'i.'もなくても動作します。他のデータにも同様のカラムがある場合には、常に安全のために使用します。エッチの部分? –