[解決済み] グループ内でカラムをカンマ区切りで折りたたみ、連結、集計する。
2023-02-17 23:03:58
質問
データフレーム内の1列を2つのグループ化変数に従って集約し、個々の値をカンマで区切りたいのです。
ここにいくつかのデータがあります。
data <- data.frame(A = c(rep(111, 3), rep(222, 3)), B = rep(1:2, 3), C = c(5:10))
data
# A B C
# 1 111 1 5
# 2 111 2 6
# 3 111 1 7
# 4 222 2 8
# 5 222 1 9
# 6 222 2 10
"A"と"B"はグループ化変数、"C"はカンマ区切りに畳みたい変数です。
character
という文字列を作成します。私は試してみました。
library(plyr)
ddply(data, .(A,B), summarise, test = list(C))
A B test
1 111 1 5, 7
2 111 2 6
3 222 1 9
4 222 2 8, 10
に変換しようとしたのですが、テストカラムを
character
に変換しようとすると、このようになります。
ddply(data, .(A,B), summarise, test = as.character(list(C)))
# A B test
# 1 111 1 c(5, 7)
# 2 111 2 6
# 3 222 1 9
# 4 222 2 c(8, 10)
どうすれば
character
の形式を維持したまま、カンマで区切るにはどうしたらよいでしょうか。例えば、1行目は
"5,7"
と表示され、c(5,7)とは表示されません。
どのように解決するのですか?
以下は
toString
は、文字列のベクトルを連結する関数で、コンマとスペースで構成要素を区切ります。カンマが不要な場合は
paste()
を使うことができます。
collapse
の引数で代用します。
data.table
# alternative using data.table
library(data.table)
as.data.table(data)[, toString(C), by = list(A, B)]
集計 これはパッケージを使用しません。
# alternative using aggregate from the stats package in the core of R
aggregate(C ~., data, toString)
sqldf
そして、SQL関数を使った代替案がこちらです。
group_concat
を使っています。
sqldf パッケージ
:
library(sqldf)
sqldf("select A, B, group_concat(C) C from data group by A, B", method = "raw")
dplyr
A
dplyr
の代替となります。
library(dplyr)
data %>%
group_by(A, B) %>%
summarise(test = toString(C)) %>%
ungroup()
プライヤー
# plyr
library(plyr)
ddply(data, .(A,B), summarize, C = toString(C))
関連
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
[解決策】 plot.new() のエラー:図の余白が大きすぎる。
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
R - ユークリッド距離の計算を簡単にする方法
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] 不足しているパッケージをチェックし、インストールするためのエレガントな方法?
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
-
[解決済み】Rスクリプトで警告をグローバルに抑制する方法
-
[解決済み] 各グループの行数をカウントする
-
[解決済み] カラム内のカンマ区切り文字列を別の行に分割する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] lm.fit(x,y,offset = offset, singular.ok,...) 0 非NAケースでboxcox式で計算するとエラーになる。
-
[解決済み] ネストされた plot_grid を同じサイズに拡大縮小するには?
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み】ifelse()でDateオブジェクトがnumericオブジェクトにならないようにする方法
-
[解決済み】エラー:Rで関数が見つかりませんでした。
-
[解決済み] テーブルをデータフレームに変換する方法