2
の値いずれかで名前の新しい列に結果を格納してグループ化する2レベルは、次の検討:Rのdata.table:レベル
dt1 <- data.table(id = c(1,1,1,2,2,2,2), status = c(0,1,1,2,3,0,2), val = c(2,2,4,1,2,3,1))
I名前の列を作るために、平均FUNCと(ID、ステータス)によってグループを使用これは0から3までのステータス値から構成されています。次の結果を
stat <- c(0:3)
for(i in 1:length(stat)) dt1[, eval(paste("meanval.stat.", stat[i], sep = "")) := mean(val, na.rm = TRUE), by = .(id, status == stat[i])]
を:
id status val meanval.stat.0 meanval.stat.1 meanval.stat.2 meanval.stat.3
1: 1 0 2 2.000000 2.00 2.666667 2.666667
2: 1 1 2 3.000000 3.00 2.666667 2.666667
3: 1 1 4 3.000000 3.00 2.666667 2.666667
4: 2 2 1 1.333333 1.75 1.000000 1.666667
5: 2 3 2 1.333333 1.75 2.500000 2.000000
6: 2 0 3 3.000000 1.75 2.500000 1.666667
7: 2 2 1 1.333333 1.75 1.000000 1.666667
しかし、私は別の結果李を期待KE次:
id status val meanval.stat.0 meanval.stat.1 meanval.stat.2 meanval.stat.3
1: 1 0 2 2 3 0 0
2: 1 1 2 2 3 0 0
3: 1 1 4 2 3 0 0
4: 2 2 1 3 0 1 2
5: 2 3 2 3 0 1 2
6: 2 0 3 3 0 1 2
7: 2 2 1 3 0 1 2
私はおそらくロジックが "とを比較することによって作成された論理vector
に基づく「val」をサブセット、「ID」によりグループになりますいただきました!私の解決策
理由が、溶液のdidn上記わかりませんの私のために働く。 'id'を1としたすべての行に対して' NaN'を取得しました。 – MKR
@MKRあなたのdata.tableのバージョンは?私は '1.10.5'を使用しました – akrun
鉱山は1.10.4-3です。 – MKR