私が4つのオブジェクト(a,b,c,d
)を持っていると考えてください。そして、5人に、それらの外観などに応じてそれらにラベルを付けるように依頼します(カテゴリ1または2)。これらのオブジェクトに対して5人が提供するラベルは次のように表示されます。
df <- data.frame(a = c(1,2,1,2,1), b=c(1,2,2,1,1), c= c(2,1,2,2,2), d=c(1,2,1,2,1))
表形式では、
---------
a b c d
---------
1 1 2 1
2 2 1 2
1 2 2 1
2 1 2 2
1 1 2 1
----------
ここで、オブジェクトのグループに同じラベル(1または2)が付けられた回数のパーセンテージを計算したいと思います。たとえば、オブジェクトa、b、dには、5人中3人が同じラベルを付けました。だから、その割合は3/5(= 60%)です。オブジェクトaとdにはすべての人が同じラベルを付けているので、その割合は5/5(= 100%)です。
この統計を手動で計算できますが、元のデータセットには、そのようなオブジェクトが50個あり、人は30人、ラベルは4(1、2、3、および4)です。この大きなデータセットのそのような統計を自動的に計算するにはどうすればよいですか?R
そのような統計を計算できる既存のパッケージ/ツールはありますか?
注:グループは、任意のサイズとすることができます。最初の例では、グループはa、b、およびdで構成され、2番目の例ではグループはaとdで構成されます。
ここには2つのタスクがあります。1つは、関連するすべての組み合わせのリストを作成すること、もう1つは、行ごとの類似性を評価および集計することです。combn
最初のタスクを開始できますが、結果をきちんとしたリストにまとめるには少しマッサージが必要です。2番目のタスクはで処理できますがprop.table
、ここでは直接計算する方が簡単です。
ここではtidyverse
文法(主にpurrr
、リストの処理に役立ちます)を使用しましたが、必要に応じてベースに変換します。
library(tidyverse)
map(2:length(df), ~combn(names(df), .x, simplify = FALSE)) %>% # get combinations
flatten() %>% # eliminate nesting
set_names(map_chr(., paste0, collapse = '')) %>% # add useful names
# subset df with combination, see if each row has only one unique value
map(~apply(df[.x], 1, function(x){n_distinct(x) == 1})) %>%
map_dbl(~sum(.x) / length(.x)) # calculate TRUE proportion
## ab ac ad bc bd cd abc abd acd bcd abcd
## 0.6 0.2 1.0 0.2 0.6 0.2 0.0 0.6 0.2 0.0 0.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加