私はプログラミング(ループなど)の技術をかなり新しくしています。これは、私のアプローチがうまくいくか、間違いなく必要かという意見を得ることができたら大変感謝しています。はるかに大きなサンプルで使用しようとしていた場合に最適化されます。データフレームの行を連続した昇順のIDでグループ化する
現在、私は約20,000の観測値を持ち、列の1つは領収書のIDです。私が達成したいのは、各行を、n + 1の形式で昇順になるIDで構成されるグループに割り当てることです。このルールが破損している場合は、ルールが再度破られるまで新しいグループを作成する必要があります。説明するために
が、私はこのテーブルを持って言うことができます(重要な注意はIDが一意である必要はありませんし、私の例では、ID 10のように、繰り返すことができることである):
はMyTable <- data.frame(ID = c(1,2,3,4,6,7,8,10,10,11,17,18,19,200,201,202,2010,2011,2013))
MyTable
ID
1
2
3
4
6
7
8
10
10
11
17
18
19
200
201
202
2010
2011
2013
私のグループ分けの結果は次のようする必要があります:
ID GROUP
1 1
2 1
3 1
4 1
6 2
7 2
8 2
10 3
10 3
11 3
17 4
18 4
19 4
200 5
201 5
202 5
2010 6
2011 6
2013 7
私は昇順でIDを発注するためにdplyrを使いました。次に、MyData $ Groupという変数を作成しました。この変数は、1で埋めています。
rep(1,length(MyTable$ID)
for (i in 2:length(MyTable$ID)) {
if(MyTable$ID[i] == MyTable$ID[i-1]+1 | MyTable$ID[i] == MyTable$ID[i-1]) {
MyTable$ID[i] <- MyTable$GROUP[i-1]
} else {
MyTable$GROUP[i] <- MyTable$GROUP[i-1]+1
}
}
このコードは私のために働いていて、結果はかなり簡単です。しかし、経験豊富なプログラマーの目には、このコードが「悪い」、「平均的」、「良い」などの評価を得ているのではないかと思います。
編集:このトピックはすでに触れられていると確信しています。主な違いは、ここで最適化の話題に触れて、自分のアプローチが基準を満たしているかどうかを確認することです。
ありがとうございます!
を、それがRでforループを使用して – Nate
良いことだ動作するかどうか、常に回避されました!しかし、初心者の視点から、それは良いです。今度は、 "apply"ファミリーのビューから考えて効率を改善しようとする –
* "+1ルールを破らないようにする" *は "連続ID" *または "連続ID"と呼ばれます*また、 [タグ:rstudio]特にRStudio(IDE)と関係がない限り、この場合はそうではありません。 – smci