У меня есть кадр данных с человеко-годами наблюдений по ряду переменных. Это выглядит следующим образом:Приложение R plyr для заполнения недостающих значений
year serial moved urban.rural.code
15 1982 1000_1 0 0
16 1983 1000_1 0 0
17 1984 1000_1 0 0
18 1985 1000_1 1 0
19 1986 1000_1 1 1
20 1981 1000_2 0 1
21 1982 1000_2 0 1
22 1983 1000_2 0 1
23 1984 1000_2 0 0
24 1985 1000_2 0 9
25 1996 1000_2 0 1
26 1993 1000_3 0 1
27 1994 1000_3 0 1
28 1984 1000_4 0 0
29 1985 1000_4 0 7
30 1987 1000_5 0 1
31 1984 1000_6 0 0
32 1999 1000_6 0 8
Для каждого наблюдения в течение серийного номера, если наблюдение было зафиксировано в 1985 году и имеет значение moved
= 0 в 1895 году, то я хочу, чтобы назначить urban.rural.code
в 1984 году до его значение в 1985 году. В приведенном выше примере urban.rural.code
ТОЛЬКО для строк 23 и 28 следует назначить соответственно 9 и 7.
Я использовал комбинацию ddply
и вспомогательную функцию, которая выглядит следующим образом:
fill1984 <- function(group) {
if((1984 %in% group$year) & (group[group$year == 1985, 'moved'] == 0)) {
group[group$year == 1984, 'urban.rural.code'] <- group[group$year == 1985, 'urban.rural.code']
}
return(group)
}
data <- ddply(data, 'serial', fill1984, .parallel=TRUE)
И я получаю следующее сообщение об ошибке:
Error in do.ply(i) : task 2 failed - "argument is of length zero"
In addition: Warning message:
In setup_parallel() : No parallel backend registered
Я не знаю, где я Я ошибаюсь. Как внести изменения в urban.rural.code
в каждую группу serial
?