-1

以下で説明するタスクを実行しようとして失敗したため、助けていただければ幸いです。

以下の最大の表には、漁師の割り当て所有権 (およびその他の変数「cpue」) の経時的なデータが含まれています。私は漁師を、彼らが所有する割り当ての数に従って分類しました (「カテゴリ」)。フィッシャーは、所有するクォータの数を増減できます。したがって、その所有カテゴリも変更される可能性があります。漁業者が所有権を変更するたびに情報を抽出する必要があります。すでにクォータ数が増減した前年の行です。たとえば、2000 年と 2001 年のクォータ数がそれぞれ 20 と 45 だった場合、2000 年の情報 (行) が必要です。さらに、漁師の所有レベルを示すカテゴリを含む新しい列が必要です。動いています。下の 2 番目の表は、抽出された行で作成する必要がある新しいデータ フレームを示しています。

私のデータ:

ID  fisher  year    qtty    category    cpue
1   1   1998    13  1   0.5994452
2   1   1999    13  1   0.6176183
3   1   2000    13  1   0.6871764
4   1   2001    20  2   0.3228005
5   1   2002    20  2   0.6505336
6   1   2003    20  2   0.8615834
7   1   2004    20  2   0.6871764
8   1   2005    20  2   0.7469739
9   1   2006    20  2   0.7380952
10  1   2007    45  3   0.7516396
11  1   2008    45  3   0.6808454
12  1   2009    45  3   0.6734158
13  1   2010    45  3   0.70367
14  1   2011    45  3   0.5434572
15  1   2012    45  3   0.6181238
16  2   2000    50  3   0.5191856
17  2   2001    50  3   0.6098226
18  2   2002    50  3   1.0018519
19  2   2003    50  3   1.2049724
20  2   2004    50  3   0.5857708
21  2   2005    10  1   0.6744186
22  2   2006    10  1   0.8123333
23  2   2007    10  1   0.3228005
24  2   2008    10  1   0.6505336
25  2   2009    10  1   0.8615834
26  2   2010    0   4   0
27  3   1998    25  2   0.7469739
28  3   1999    25  2   0.7380952
29  3   2000    25  2   0.7516396
30  3   2001    25  2   0.6808454
31  3   2002    10  1   0.6734158
32  3   2003    10  1   0.70367
33  3   2004    10  1   0.5434572
34  3   2005    10  1   0.6181238
35  3   2006    45  3   0.4698849
36  3   2007    45  3   1.0714286
37  3   2008    45  3   1.242439
38  3   2009    45  3   1.0614261
39  3   2010    45  3   0.9761391
40  3   2011    45  3   1.0041898
41  3   2012    45  3   0.9429851
42  4   2005    45  3   0.9310958
43  4   2006    50  3   0.8932985
44  4   2007    50  3   0.7867613
45  4   2008    20  2   0.7994713
46  4   2009    20  2   0.9368927
47  4   2010    10  1   0.8123333
48  4   2011    0   4   0
49  5   1998    20  2   0.4698849
50  5   1999    20  2   1.0714286
51  5   2000    20  2   1.242439
52  5   2001    20  2   1.0614261
53  5   2002    20  2   0.9761391
54  5   2003    20  2   1.0041898
55  5   2004    20  2   0.7469739
56  5   2005    0   4   0.7380952
57  6   2000    55  3   0.7516396
58  6   2001    55  3   0.6808454
59  6   2002    55  3   0.6734158
60  6   2003    55  3   0.6505336
61  6   2004    55  3   0.8615834
62  6   2005    55  3   0.6871764
63  6   2006    55  3   0.6181238
64  6   2007    0   4   0

これは私が必要なものです:

ID  fisher  year    qtty    category    cpue    category2
3   1   2000    13  1   0.6871764   1
25  2   2009    10  1   0.8615834   1
34  3   2005    10  1   0.6181238   1
47  4   2010    10  1   0.8123333   1
9   1   2006    20  2   0.7380952   2
30  3   2001    25  2   0.6808454   3
46  4   2009    20  2   0.9368927   3
44  4   2007    50  3   0.7867613   4
20  2   2004    50  3   0.5857708   5
25  2   2009    10  1   0.8615834   6
47  4   2010    10  1   0.8123333   6
55  5   2004    20  2   0.7469739   7
63  6   2006    55  3   0.6181238   8

所有区分は、1(1~15 枠)、2(16~40 枠)、3(>40 枠)、4(0 枠、漁業から撤退した者)である。必要な新しいカテゴリは、さまざまな所有権カテゴリ間の遷移を示す必要があります (たとえば、カテゴリ 1 は所有権レベル 1 から所有権レベル 2 への遷移です)。次の表に詳細を示します。

From    to  category2
1   2   1
2   3   2
2   1   3
3   2   4
3   1   5
1   0   6
2   0   7
3   0   8

ありがとう!!

4

3 に答える 3

1

あなたの問題を正しく理解していれば、これはうまくいくはずです。df質問で示した大きなデータセットです-

library(data.table)
dt <- data.table(df)
dt[,qttychange := diff(qtty), by = "fisher"]
categorychanges <- dt[qttychange != 0]

dt[,nextcategory := c(tail(category,-1),NA)]
dt[qttychange == 0 ,nextcategory := NA]
categorytable <- dt[!is.na(nextcategory),list(freq = .N), by = c("category","nextcategory")]

出力 -

> categorychanges
    ID fisher year qtty category      cpue qttychange
 1:  3      1 2000   13        1 0.6871764          7
 2:  9      1 2006   20        2 0.7380952         25
 3: 20      2 2004   50        3 0.5857708        -40
 4: 25      2 2009   10        1 0.8615834        -10
 5: 30      3 2001   25        2 0.6808454        -15
 6: 34      3 2005   10        1 0.6181238         35
 7: 42      4 2005   45        3 0.9310958          5
 8: 44      4 2007   50        3 0.7867613        -30
 9: 46      4 2009   20        2 0.9368927        -10
10: 47      4 2010   10        1 0.8123333        -10
11: 48      4 2011    0        4 0.0000000          5
12: 55      5 2004   20        2 0.7469739        -20
13: 63      6 2006   55        3 0.6181238        -55
> categorytable
    category nextcategory freq
 1:        1            2    1
 2:        2            3    1
 3:        3            1    1
 4:        1            4    2
 5:        2            1    2
 6:        1            3    1
 7:        3            3    1
 8:        3            2    1
 9:        4            2    1
10:        2            4    1
11:        3            4    1
于 2013-11-02T16:39:59.413 に答える