注再コーディングするとき:この記事は別のポストに関連している(Recoding longitudinal variables in R)Rのdata.table:出力異なる値に変わった変数
を私はdata.table
を持っていると私は(homes
)変数の値を再コーディングする必要が条件付け他の変数の値に置き換えます。基本的にはmonth == "1"
とyear == "2011"
に対応する観測値をmonth == "12"
とyear == "2010"
の値にしたいと思います。 data.table
は次のようになります。
> head(test,25)
LA month year entry exit total homes
1: Barking and Dagenham 10 2010 2 0 2 NA
2: Barking and Dagenham 11 2010 3 0 3 NA
3: Barking and Dagenham 12 2010 3 0 3 15
4: Barking and Dagenham 1 2011 6 0 6 NA
5: Barking and Dagenham 2 2011 1 0 1 NA
6: Barking and Dagenham 3 2011 2 0 2 NA
7: Barking and Dagenham 4 2011 1 0 1 NA
8: Barking and Dagenham 10 2011 1 0 1 NA
9: Barking and Dagenham 11 2011 1 0 1 NA
10: Barking and Dagenham 1 2012 1 0 1 NA
11: Barking and Dagenham 9 2012 1 0 1 NA
12: Barking and Dagenham 6 2013 2 0 2 NA
13: Barking and Dagenham 1 2014 0 1 -1 NA
14: Barking and Dagenham 12 2014 0 1 -1 NA
15: Barking and Dagenham 3 2015 1 1 0 NA
16: Barking and Dagenham 11 2015 1 1 0 NA
17: Barking and Dagenham 12 2015 1 0 1 NA
18: Barnet 11 2010 24 0 24 NA
19: Barnet 12 2010 28 0 28 86
20: Barnet 1 2011 28 0 28 NA
21: Barnet 2 2011 6 0 6 NA
22: Barnet 3 2011 1 0 1 NA
23: Barnet 4 2011 1 0 1 NA
24: Barnet 7 2011 2 0 2 NA
25: Barnet 8 2011 1 0 1 NA
LA month year entry exit total homes
次のようにこのdata.table
の構造は次のとおりです。
Classes ‘data.table’ and 'data.frame': 4664 obs. of 7 variables:
$ LA : Factor w/ 151 levels "Barking and Dagenham",..: 1 1 1 1 1 1 1 1 1 1 ...
$ month: int 10 11 12 1 2 3 4 10 11 1 ...
$ year : int 2010 2010 2010 2011 2011 2011 2011 2011 2011 2012 ...
$ entry: int 2 3 3 6 1 2 1 1 1 1 ...
$ exit : int 0 0 0 0 0 0 0 0 0 0 ...
$ total: int 2 3 3 6 1 2 1 1 1 1 ...
$ homes: int NA NA 15 NA NA NA NA NA NA NA ...
私は新しい変数を作成homes.1
homes
を再コーディングするために。私は以下のdata.table
機能を使用します:
test = test[year== "2011" & month == "1", homes.1 := as.numeric(!is.na(homes)), by = LA]
test[, homes.1 := ifelse(!is.na(homes.1),
test[month == "12" & year == "2010",homes],
homes.1), by=LA]
私は部分的に私が欲しいものを手に入れます。変数homes.1は再コード化されますが、変数の家に対応する値とは異なる値になります。 test
見ての最初の25個の観測:
LA month year entry exit total homes homes.1
1: Barking and Dagenham 10 2010 2 0 2 NA NA
2: Barking and Dagenham 11 2010 3 0 3 NA NA
3: Barking and Dagenham 12 2010 3 0 3 15 NA
4: Barking and Dagenham 1 2011 6 0 6 NA 46
5: Barking and Dagenham 2 2011 1 0 1 NA NA
6: Barking and Dagenham 3 2011 2 0 2 NA NA
7: Barking and Dagenham 4 2011 1 0 1 NA NA
8: Barking and Dagenham 10 2011 1 0 1 NA NA
9: Barking and Dagenham 11 2011 1 0 1 NA NA
10: Barking and Dagenham 1 2012 1 0 1 NA NA
11: Barking and Dagenham 9 2012 1 0 1 NA NA
12: Barking and Dagenham 6 2013 2 0 2 NA NA
13: Barking and Dagenham 1 2014 0 1 -1 NA NA
14: Barking and Dagenham 12 2014 0 1 -1 NA NA
15: Barking and Dagenham 3 2015 1 1 0 NA NA
16: Barking and Dagenham 11 2015 1 1 0 NA NA
17: Barking and Dagenham 12 2015 1 0 1 NA NA
18: Barnet 11 2010 24 0 24 NA NA
19: Barnet 12 2010 28 0 28 86 NA
20: Barnet 1 2011 28 0 28 NA 55
21: Barnet 2 2011 6 0 6 NA NA
22: Barnet 3 2011 1 0 1 NA NA
23: Barnet 4 2011 1 0 1 NA NA
24: Barnet 7 2011 2 0 2 NA NA
25: Barnet 8 2011 1 0 1 NA NA
LA month year entry exit total homes homes.1
同様に、homes.1とtest
の構造は次のとおりです。
> str(test)
Classes ‘data.table’ and 'data.frame': 4664 obs. of 8 variables:
$ LA : Factor w/ 151 levels "Barking and Dagenham",..: 1 1 1 1 1 1 1 1 1 1 ...
$ month : int 10 11 12 1 2 3 4 10 11 1 ...
$ year : int 2010 2010 2010 2011 2011 2011 2011 2011 2011 2012 ...
$ entry : int 2 3 3 6 1 2 1 1 1 1 ...
$ exit : int 0 0 0 0 0 0 0 0 0 0 ...
$ total : int 2 3 3 6 1 2 1 1 1 1 ...
$ homes : int NA NA 15 NA NA NA NA NA NA NA ...
$ homes.1: num NA NA NA 46 NA NA NA NA NA NA ...
- attr(*, ".internal.selfref")=<externalptr>
それはhomes
値に応じて適切にhomes.1
の観測を再コーディングされていない理由を私は疑問に思います。期待される出力は次のようになります。
LA month year entry exit total homes homes.1
1: Barking and Dagenham 10 2010 2 0 2 NA NA
2: Barking and Dagenham 11 2010 3 0 3 NA NA
3: Barking and Dagenham 12 2010 3 0 3 15 NA
4: Barking and Dagenham 1 2011 6 0 6 NA 15
5: Barking and Dagenham 2 2011 1 0 1 NA NA
6: Barking and Dagenham 3 2011 2 0 2 NA NA
7: Barking and Dagenham 4 2011 1 0 1 NA NA
8: Barking and Dagenham 10 2011 1 0 1 NA NA
9: Barking and Dagenham 11 2011 1 0 1 NA NA
10: Barking and Dagenham 1 2012 1 0 1 NA NA
11: Barking and Dagenham 9 2012 1 0 1 NA NA
12: Barking and Dagenham 6 2013 2 0 2 NA NA
13: Barking and Dagenham 1 2014 0 1 -1 NA NA
14: Barking and Dagenham 12 2014 0 1 -1 NA NA
15: Barking and Dagenham 3 2015 1 1 0 NA NA
16: Barking and Dagenham 11 2015 1 1 0 NA NA
17: Barking and Dagenham 12 2015 1 0 1 NA NA
18: Barnet 11 2010 24 0 24 NA NA
19: Barnet 12 2010 28 0 28 86 NA
20: Barnet 1 2011 28 0 28 NA 86
21: Barnet 2 2011 6 0 6 NA NA
22: Barnet 3 2011 1 0 1 NA NA
23: Barnet 4 2011 1 0 1 NA NA
24: Barnet 7 2011 2 0 2 NA NA
25: Barnet 8 2011 1 0 1 NA NA
LA month year entry exit total homes homes.1
私はそれが 'data.table'関数に与えている条件の原因だと思います。最初に 'homes.1'変数を作成する必要があります。 –
サンプルデータを入力すると役立ちます。私の推測では、マージの割り当てを行うことができるということです – Frank
質問を再現できるようにデータセットを作成するためのコードを含める必要があります – jangorecki