この質問にはすでに答えがあります:
グループごとに ID 列を追加 [重複]
(答えは4つ)
7 年前
に閉店しました。
多数の列を含むデータ フレームがあります。 「id」という名前の新しい列を作成して、「sample」列内の同一の値の各グループに一意の ID 番号を付与したいと思います。
データ例:
df <- data.frame(
index = 1:30,
val = c(
14L, 22L, 1L, 25L, 3L, 34L, 35L, 36L, 24L, 35L, 33L, 31L, 30L,
30L, 29L, 28L, 26L, 12L, 41L, 36L, 32L, 37L, 56L, 34L, 23L, 24L,
28L, 22L, 10L, 19L
),
sample = c(
5L, 6L, 6L, 7L, 7L, 7L, 8L, 9L, 10L, 11L, 11L, 12L, 13L, 14L,
14L, 15L, 15L, 15L, 16L, 17L, 18L, 18L, 19L, 19L, 19L, 20L, 21L,
22L, 23L, 23L
)
)
最終的にやりたいことは次のとおりです。
index val sample id
1 1 14 5 1
2 2 22 6 2
3 3 1 6 2
4 4 25 7 3
5 5 3 7 3
6 6 34 7 3
1
dplyr ソリューション: df$id <- group_indices(df$sample)。
– user3932000
2019 年 7 月 29 日 22:04
------------------------
どうですか
df2 <- transform(df,id=as.numeric(factor(sample)))
?
これ ([グループごとに ID を追加] 列から抜粋) はもう少し効率的になるはずですが、おそらく少し覚えにくいかもしれません。
df3 <- transform(df, id=match(sample, unique(sample)))
all.equal(df2,df3) ## TRUE
やりたい場合は、彼の Tidyverse 内:
library(dplyr)
df %>% group_by(sample) %>% mutate(id=cur_group_id())
6
1
気に入っています: 私が理解できる要素の使用法。 :-)
– カール・ウィトフト
2014 年 6 月 9 日 12:09
1
ここで少し注意してください: as.numeric(factor(sample)) メソッドは降順の数値シーケンスのみを生成します。サンプルはすでに注文されています。
– デヴィッド・アレンバーグ
2016 年 5 月 5 日 15:10
1
factor() ソリューションの優れた点は、NA 値を無視することです
– ウィル T-E
2016 年 11 月 17 日 10:16
@Ben Bolker、ありがとう! dplでコードを書けますか年?
– アレックス
2021 年 2 月 23 日 21:41
上記のコメントを見ましたか stackoverflow.com/questions/24119599/… ?
– ベン・ボルカー
2021 年 2 月 23 日 21:42
------------------------
これが data.table ソリューションです
library(data.table)
setDT(df)[, id := .GRP, by = sample]
0