Примечание: Это сообщение относится к другому сообщению (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
создать новую переменную homes.1
. Я использую следующие 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 перекодируются, но имеют разные значения, чем те, которые соответствуют переменным домам. Первые 25 наблюдения test
взгляда:
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
Кроме того, структура test
с homes.1 является:
> 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.1
согласно homes
значений , Ожидаемый результат должен выглядеть следующим образом:
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