次のように、各行が記事の引用を表し、記事の発行日と各参照の違いを表すデータセットがあります。
EID ref delta
1 2-s2 r1 0
2 2-s2 r2 3
3 2-s2 r3 22
4 2-s2 r4 100
5 2-s2 r5 7
6 3-s2 r6 1
7 3-s2 r7 0
8 3-s2 r8 1
個別のEIDごとに、年のデルタのさまざまな範囲に含まれる参照の数を特定したいと思います(つまり、特定の記事の場合、1歳、2歳、4歳などの参照の数)。それぞれにバケットを作成しようとしました。
buckets=c(0,1,2,4,8,16,32,64,9999)
bt=bt %>%
mutate(delta = as.numeric(delta)) %>%
mutate(bucket=cut(delta, breaks = buckets))
group = bt %>%
group_by(EID, bucket) %>%
summarise(count=n())
結果のグループ化されたデータは次のとおりです。
EID bucket count
1 2-s2 (1,2] 6
2 2-s2 (2,4] 8
3 2-s2 (4,8] 16
4 2-s2 (8,16] 18
5 2-s2 (16,32] 10
6 3-s2 (1,2] 1
7 3-s2 (2,4] 13
8 3-s2 (4,8] 1
9 4-s1 (4,8] 3
持っているバケットごとに列を作成し、EIDでグループ化して、EIDごとに適切なバケットに適切なカウントを配置します。結果は次のようになります。
EID (1,2] (2,4] (4,8] (8,16] (16,32]
1 2-s2 6 8 16 18 10
2 3-s2 1 13 1 0 0
2 4-s1 0 0 3 0 0
最初のテーブルを生成するために使用したコードを見ると、unstack(group, bucket~count)
なんらかの方法で使用できるか、を使用してこれらのバケット列の作成を直接自動化できるはずsummarise()
ですが、正確な方法がわかりません。理想的には、各列にハードコーディングする必要はありません。バケットリストを参照できるようにしたいので、バケットスキームを変更すると、それに応じて更新されます。ありがとうございました!
pivot_wider
「ワイド」フォーマットに変形するために使用できます
library(dplyr)
library(tidyr)
group %>%
pivot_wider(names_from =bucket, values_from = count)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加