質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

432閲覧

R:特定のまとまりの重複をカウントする方法

退会済みユーザー

退会済みユーザー

総合スコア0

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

1グッド

0クリップ

投稿2023/01/30 14:36

前提

Rで処理を考えています。

実現したいこと

以下の左図のように、グループに属する人物のリストがあります。
各グループ内の人物がマッチする人数で、右図のような集計をしたいと思っています。
グループは3,000ほどあり、人物はのべ5万人あります。
右図のようなリストでなく、行列でのアウトプットでも構いません。

イメージ説明

どのようなスクリプトもしくはコマンドを使えば良いか教えてください。
よろしくお願いします。

melian😄を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2023/01/30 14:47

一人の人間が3つ以上のグループに所属するケースは考えなくていいのでしょうか?
退会済みユーザー

退会済みユーザー

2023/01/30 15:05

ありえます。 例えば、人物2さんがグループDにも属していたら、A,B,1、A,D,1、B,D,1、としたいです。
guest

回答1

0

ベストアンサー

r

1suppressMessages(library(tidyverse)) 2 3df <- data.frame( 4 グループ = c(rep('A', 5), rep('B', 3), rep('C', 6)), 5 人物 = c(1:5, 2, 6, 7, 5, 8:12) 6) 7 8dfx <- t(combn(unique(df$グループ), 2)) %>% 9 as.data.frame() %>% setNames(c('グループa', 'グループb')) %>% 10 rowwise() %>% 11 mutate(freq = sum(count(df[df$グループ %in% c(グループa, グループb),], 人物)$n == 2)) 12 13dfx 14 15# # A tibble: 3 × 3 16# # Rowwise: 17# グループa グループb freq 18# <chr> <chr> <int> 19# 1 A B 1 20# 2 A C 1 21# 3 B C 0

投稿2023/01/30 22:48

melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/01/31 06:18

melianさん、ありがとうございました! 1行で済ませてしまわれるなんて・・・感動しました。 また、tidyverse が非常にパワフルなライブラリだと知りました、ご紹介いただきありがとうございました。
退会済みユーザー

退会済みユーザー

2023/01/31 13:48

melianさん、図々しくすいません。 本番データ(3,000グループ、のべ4万人程度)で試していますが、数時間経っても処理が終わりません・・ 処理が早く終わる方法ご存知ないでしょうか?
melian

2023/01/31 14:01

3000グループですと、3000*2999/2 ≒ 450万通りの組み合わせを調べることになりますので、1つの組み合わせで10msかかるとしても12時間以上になります。並列処理ができればよいのですが、R 自体にはその様な機能がありませんので。。。なので、私でしたら他のプログラミング言語やライブラリを使うことになるかと思います。例えば Python + Pandas や awk や Perl などです。
退会済みユーザー

退会済みユーザー

2023/02/01 00:32

ありがとうございます。melianさん、すごいですね! Python 、 awk 、 Perl どれも挫折したもの... Pythonに挑戦してみます。 また質問立てると思いますので、よかったら教えてくださいませ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問