loess() для подмножеств данных
Извиняюсь, если на этот вопрос уже был дан ответ, но я не могу найти подходящий пример.
Я пытаюсь получить некоторые данные для анализа вариограммы.
У меня есть фрейм данных 'aa' со столбцами 'y' 'long', 'lat' и 'z'.
Я пытаюсь бежать:loess(aa2$y ~ aa$long + aa$lat, aa, degree =2)
на каждом уровне фактора z.
В конце концов, мне нужен фрейм данных 'Long', Lat ',' Residual 'и' Z ', остатки, поступающие от нескольких зависящих от фактора объектов лесса.
Учитывая мое ограниченное знание R, я не могу понять правильный синтаксис, чтобы это произошло.
Я предполагаю, что можно использовать одну из *apply функций, но я недостаточно хорошо знаю язык, чтобы написать его правильно.
Спасибо за любые указания или разъяснения.
1 ответ
Решение
Как это?
aa <- data.frame(y=rnorm(100),long=rnorm(100),lat=rnorm(100),Z=rep(1:4, each=25))
result <- do.call(rbind,lapply(unique(aa$Z),function(z){
df <- aa[aa$Z==z,]
fit <- loess(y~long+lat,df,degree=2)
cbind(Z=z,long=df$long,lat=df$lat,residuals=fit$residuals)
}))
head(result)
# Z long lat residuals
# 1 1 0.9622113 0.03114804 -0.2189496
# 2 1 -0.6539525 0.32908716 1.3904483
# 3 1 1.0066978 -0.78833830 0.1044707
# 4 1 -1.0873116 -0.55218226 1.8526030
# 5 1 -1.1286776 1.68879949 0.2459814
# 6 1 -1.0052768 -0.85890027 -0.9842824