次のようなデータフレーム(df)があります。
School Student Year
A 10 1999
A 10 2000
A 20 1999
A 20 2000
A 20 2001
B 10 1999
B 10 2000
そしてID
、dfが次のようになるようにperson列を作成したいと思います。
ID School Student Year
1 A 10 1999
1 A 10 2000
2 A 20 1999
2 A 20 2000
2 A 20 2001
3 B 10 1999
3 B 10 2000
つまり、ID
変数はデータセット内の人物を示し、学生数と学校のメンバーシップの両方を考慮します(ここでは合計3人の学生がいます)。
私がやったdf$ID <- df$Student
とすると値+1を要求しようとしたc("School", "Student)
ユニークでした。動作していません。感謝します。
これはbase R
、groupby操作を行わなくても実行できます。
df$ID <- cumsum(!duplicated(df[1:2]))
df
# School Student Year ID
#1 A 10 1999 1
#2 A 10 2000 1
#3 A 20 1999 2
#4 A 20 2000 2
#5 A 20 2001 2
#6 B 10 1999 3
#7 B 10 2000 3
注:「School」と「Student」が注文されていると仮定します
またはを使用して tidyverse
library(dplyr)
df %>%
mutate(ID = group_indices_(df, .dots=c("School", "Student")))
# School Student Year ID
#1 A 10 1999 1
#2 A 10 2000 1
#3 A 20 1999 2
#4 A 20 2000 2
#5 A 20 2001 2
#6 B 10 1999 3
#7 B 10 2000 3
@radekが述べたように、最近のバージョン(dplyr_0.8.0
)では、group_indices_
非推奨の通知を受け取ります。代わりに、group_indices
df %>%
mutate(ID = group_indices(., School, Student))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加