0

データフレーム内の行の特定の組み合わせに番号を付けたい (ID と時間で順序付けられる)

tc <- textConnection('
id              time       end_yn   number
abc             10         0        1
abc             11         0        2
abc             12         1        3 
abc             13         0        1 
def             10         0        1
def             15         1        2
def             16         0        1
def             17         0        2
def             18         1        3
')

test <- read.table(tc, header=TRUE)

journey_nr目標は、各行が属するジャーニーに基づいて各行に一意の番号を与える新しい列 (" ") を作成することです。idジャーニーは、までの一連の行として定義されます。1end_yn == 1にならend_ynない場合も、ジャーニーに番号を付ける必要があります (期待される結果の例を参照してください)。ID の行のコレクションの最後にのみend_yn == 0ジャーニーを含めることができます (ID 3 の行 4 に示されているように)。そのため、その ID に対してnoend_yn == 1が発生したか、end_yn == 0-journey の前に発生しました (id == abc例を参照)。

パッケージを使用して番号を付ける方法data.tableは知っていますが、期待される結果を得るためにどの列を結合すればよいかわかりません。data.tableSO で -tag を検索しましたが、同様の問題は見つかりませんでした。

期待される結果:

id              time       end_yn   number    journey_nr
abc             10         0        1         1
abc             11         0        2         1
abc             12         1        3         1
abc             13         0        1         2
def             10         0        1         3
def             15         1        2         3
def             16         0        1         4
def             17         0        2         4
def             18         1        3         4
4

2 に答える 2

4

これを試して:

tc$journey <- cumsum(as.numeric(c(0, head(tc$end_yn, -1)) | c(0, diff(as.numeric(tc$id))))) + 1

tc
#    id time end_yn number journey
# 1 abc   10      0      1       1
# 2 abc   11      0      2       1
# 3 abc   12      1      3       1
# 4 abc   13      0      1       2
# 5 def   10      0      1       3
# 6 def   15      1      2       3
# 7 def   16      0      1       4
# 8 def   17      0      2       4
# 9 def   18      1      3       4
于 2012-11-05T11:26:16.530 に答える
3

別のベース R の回答:

test$journey <- cumsum(c(1,head(test$number,-1)) >= test$number)

結果:

> test
   id time end_yn number journey
1 abc   10      0      1       1
2 abc   11      0      2       1
3 abc   12      1      3       1
4 abc   13      0      1       2
5 def   10      0      1       3
6 def   15      1      2       3
7 def   16      0      1       4
8 def   17      0      2       4
9 def   18      1      3       4
于 2012-11-05T12:06:17.767 に答える