[解決済み】データフレームでグループ内の行に番号を付ける
2022-04-09 06:01:32
質問
このようなデータフレームを使用しています。
set.seed(100)
df <- data.frame(cat = c(rep("aaa", 5), rep("bbb", 5), rep("ccc", 5)), val = runif(15))
df <- df[order(df$cat, df$val), ]
df
cat val
1 aaa 0.05638315
2 aaa 0.25767250
3 aaa 0.30776611
4 aaa 0.46854928
5 aaa 0.55232243
6 bbb 0.17026205
7 bbb 0.37032054
8 bbb 0.48377074
9 bbb 0.54655860
10 bbb 0.81240262
11 ccc 0.28035384
12 ccc 0.39848790
13 ccc 0.62499648
14 ccc 0.76255108
15 ccc 0.88216552
各グループの中に番号付きの列を追加しようとしています。この方法では、明らかにRの力を使っていません。
df$num <- 1
for (i in 2:(length(df[,1]))) {
if (df[i,"cat"]==df[(i-1),"cat"]) {
df[i,"num"]<-df[i-1,"num"]+1
}
}
df
cat val num
1 aaa 0.05638315 1
2 aaa 0.25767250 2
3 aaa 0.30776611 3
4 aaa 0.46854928 4
5 aaa 0.55232243 5
6 bbb 0.17026205 1
7 bbb 0.37032054 2
8 bbb 0.48377074 3
9 bbb 0.54655860 4
10 bbb 0.81240262 5
11 ccc 0.28035384 1
12 ccc 0.39848790 2
13 ccc 0.62499648 3
14 ccc 0.76255108 4
15 ccc 0.88216552 5
何かいい方法はないでしょうか?
どのように解決するのですか?
使用方法
ave
,
ddply
,
dplyr
または
data.table
:
df$num <- ave(df$val, df$cat, FUN = seq_along)
または
library(plyr)
ddply(df, .(cat), mutate, id = seq_along(val))
または
library(dplyr)
df %>% group_by(cat) %>% mutate(id = row_number())
または(最もメモリ効率の良い方法。
DT
):
library(data.table)
DT <- data.table(df)
DT[, id := seq_len(.N), by = cat]
DT[, id := rowid(cat)]
関連
-
[解決済み】x[[i]]でのエラー:レベル2で再帰的インデックス作成に失敗した
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] リストをデータフレームに変換する
-
[解決済み] データフレームのリストを行単位で1つのデータフレームに結合する
-
[解決済み] [Solved] data.frameで全てまたは一部のNA(欠損値)を含む行を削除する。
-
[解決済み】サブセットされたデータフレーム内の未使用の因子レベルを削除する
-
[解決済み】データフレームから特定の列を抽出する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「arguments imply differing number of rows: x, y」というエラーは何を意味するのか?
-
[解決済み】scale_color_manual()が動作しない件
-
[解決済み】library(ggplot2)でエラー:'ggplot2'というパッケージは存在しません。
-
[解決済み】 boxplotに色を追加する - "離散的なスケールに連続的な値が供給される "エラー
-
[解決済み】「Error in stripchart.default(x1, ...) : invalid plotting method」エラーを回避する方法は?
-
[解決済み】Rでデータフレームのサブセットをプロットする方法は?
-
[解決済み】Rはプロットするが、アブラインを描画しない
-
[解決済み】行列式で「数値/複雑な行列/ベクトルの引数を必要とする」というエラーが発生する?
-
[解決済み】Rで相対的な頻度をプロットするためにhistをどのように使用しますか?
-
[解決済み] dplyr: group_by で行番号/行位置を生成する [重複]。