【问题标题】:loess() on subsets of dataloess() 在数据子集上
【发布时间】:2014-03-12 19:03:13
【问题描述】:

抱歉,如果之前已经回答过这个问题,但我找不到适用的例子。

我正在尝试去除一些数据以进行变异函数分析。

我有一个数据框“aa”,其中包含“y”、“long”、“lat”和“z”列。

我正在尝试运行: loess(aa2$y ~ aa$long + aa$lat, aa, degree =2) 在因子 z 的每个水平上。

最后,我需要一个“Long”、“Lat”、“Residual”和“Z”的数据框,残差来自多个特定因子的黄土对象。

鉴于我对 R 的了解有限,我无法找出正确的语法来实现这一点。

我假设可以使用 *apply 函数之一,但我对语言的了解不足以正确编写它。

感谢您的任何指导或澄清。

【问题讨论】:

  • 首先,写loess(y~long+lat,aa, degree=2)。该公式引用 aa 中的 dimnames。

标签: r apply loess


【解决方案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

【讨论】:

  • 这似乎工作正常,我是否正确地将大写“Z”解释为数据中的变量,而小写“z”是函数中使用的中间变量?
  • Zaa 中的一列。它还用于命名result 中的列。由于您是 SO 新手,请read this.
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2012-12-30
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
相关资源
最近更新 更多