以下のdata.tableを指定すると、どのようにして目的の結果を得ることができますか? 'grpFreq'列には元のdata.tableの各 'grp'の数が含まれ、 'posCnt'列には各グループの 'val'の正数の数が格納され、 'ratio'列はposCnt/grpFreqです。グループの頻度、条件を満たす値の数、および比率(data.tableのグループ別)
library(data.table)
DT <- data.table(grp = c(1,2,5,5,5,5,3,4,4,4), val = c(-1,0,1,1,-1,1,1,-1,-1,1))
DT
grp val
1: 1 -1
2: 2 0
3: 5 1
4: 5 1
5: 5 -1
6: 5 1
7: 3 1
8: 4 -1
9: 4 -1
10: 4 1
この望ましい結果へ:
# grp grpFreq posCnt ratio
# 1 1 0 0
# 2 1 0 0
# 3 1 1 1
# 4 3 1 0.33
# 5 4 3 0.75
次の試みは私の道の一部を取得します。まず、「ヴァル」列から、> 0の値の数は、ここでは右端の列(「-1」と「0」の列が必要とされていない)にされています
dcast(DT, grp~val, length)
grp -1 0 1
1: 1 1 0 0
2: 2 0 1 0
3: 3 0 0 1
4: 4 2 0 1
5: 5 1 0 3
第二に、これは私を取得します各 'grp'の頻度カウントですが、上記と同じ形式ではありません。
library(dplyr)
DT %>%
group_by(grp) %>%
mutate(count = n())
grp val count
(dbl) (dbl) (int)
1 1 -1 1
2 2 0 1
3 5 1 4
4 5 1 4
5 5 -1 4
6 5 1 4
7 3 1 1
8 4 -1 3
9 4 -1 3
10 4 1 3
どうもありがとう!! data.table
で
を返します。あなたの 'dplyr'コードの問題は、あなたが' group_by(grp) 'ですが、あなたは' mutate'だけあなたのグループを要約していません。 'mutate'は' grp'の各値のための単一のエンティティではなく、あなたのデータセット内の同じ数の行を返します。そういうわけで、それはあなたが期待したように動作していません。 –
また、 'data.table'でサンプルデータを作成する特定の理由があるかどうかはわかりません。 'dplyr'パッケージの' data.frame() 'や' data_frame() 'と同じように簡単に使うことができます。あなたのサンプルデータを作成するためだけに 'data.table'ライブラリを使う必要があると思う場合には、ちょっと言ってください。 –
こんにちは@StevenMortimer。行方不明のリンクありがとうございました。当時の文法を頭に浮かべることはできませんでしたが、今は意味があります。したがって、各要素の結果はパイプラインの後続の要素で利用できます。私のデータはdata.tableに存在するので、ここで使用します。 –