長いリストに大量のデータセットが保存されています。これは最初の6つのレコードの例です。
A <- list(c("JAMES","CHARLES","JAMES","RICHARD"),
c("JOHN","ROBERT","CHARLES"),
c("CHARLES","WILLIAM","CHARLES","MICHAEL","WILLIAM","DAVID","CHARLES","WILLIAM"),
c("CHARLES"),
c("CHARLES","CHARLES"),
c("MATTHEW","CHARLES","JACK"))
各レコードに固有の各用語が出現する相対度数と、各用語が出現するレコード数の合計の比率を計算したいと思います。
次のように、分子、つまり各レコードで各一意の用語が発生する相対頻度の合計を計算します。
> B <- lapply(A, function(x)table(x)/length(x))
> aggregate(unlist(B), list(names(unlist(B))), FUN=sum)
Group.1 x
1 CHARLES 3.2916667
2 DAVID 0.1250000
3 JACK 0.3333333
4 JAMES 0.5000000
5 JOHN 0.3333333
6 MATTHEW 0.3333333
7 MICHAEL 0.1250000
8 RICHARD 0.2500000
9 ROBERT 0.3333333
10 WILLIAM 0.3750000
分母の計算方法、つまり各用語が正しく表示されるレコード数はわかりませんが。データセットで各項が発生する数を計算する方法しか知りません。
> table(unlist(A))
CHARLES DAVID JACK JAMES JOHN MATTHEW MICHAEL RICHARD ROBERT WILLIAM
9 1 1 2 1 1 1 1 1 3
ただし、一部の用語はレコード内で複数回出現するため、次のような結果を得るために、これらの繰り返しを省略したいと思います。
CHARLES DAVID JACK JAMES JOHN MATTHEW MICHAEL RICHARD ROBERT WILLIAM
6 1 1 1 1 1 1 1 1 1
これはどのように達成できますか?
私の例に基づいて、次のような最終出力を取得したいと思います。
Group.1 x
1 CHARLES 0.5486111
2 DAVID 0.1250000
3 JACK 0.3333333
4 JAMES 0.5000000
5 JOHN 0.3333333
6 MATTHEW 0.3333333
7 MICHAEL 0.1250000
8 RICHARD 0.2500000
9 ROBERT 0.3333333
10 WILLIAM 0.3750000
では、各用語が表示されるレコード数、つまり分母と比率自体をどのように計算できますか?
よろしくお願いします!