【发布时间】:2021-09-23 21:31:27
【问题描述】:
我想在具有 12044 列(和 3400 行)的数据帧上运行 Moran's I 测试,并将结果存储在 df 或排序列表中。前三列分别是 ID、Lat 和 Long。其余的都是我感兴趣的变量。
我了解lapply 旨在做我想做的事,但我不太擅长将结果存储在单独的 df 中。测试结果有四个变量:observed、expected、sd和p.value。 p>
这是 df 和函数本身的示例。
set.seed(1)
df <- data.frame(
ID = 1:15,
LATITUDE = c(42.6, 42.5, 42.3, 42.8, 42.4, 42.4, 42.4, 42.3, 42.4, 42.4, 41.4, 41.6, 41.8, 43.7, 47.3),
LONGITUDE = c(-71.5, -71.6, -71.9, -71.0, -71.1, -71.1, -71.1, -71.1, -71.2, -71.2, -70.5, -70.3, -71.2, -70.3, -68.3),
x1 = runif(15, min=0, max=1000),
x2 = runif(15, min=0, max=1000),
x3 = runif(15, min=0, max=1000),
x4 = runif(15, min=0, max=1000),
x5 = runif(15, min=0, max=1000),
x6 = runif(15, min=0, max=1000),
x7 = runif(15, min=0, max=1000),
x8 = runif(15, min=0, max=1000) )
require(ape)
dists <- as.matrix(dist(cbind(df$LONGITUDE, df$LATITUDE)))
dists.inv <- 1/dists
diag(dists.inv) <- 0
#check
dists.inv[1:5, 1:5]
#deal with the infinite values in the matrix
dists.inv[is.infinite(dists.inv)] <- 0
#calculate Moran's I
Moran.I(df$x1, dists.inv)
谢谢大家
【问题讨论】:
-
您可以使用
output <- apply(df[-(1:3)], 2, function(x) Moran.I(x, dists.inv))并将您的结果存储在一个列表中。通过output[["x1"]]访问x1列的结果,output[["x2]]访问x2等。或者您是否需要将结果存储在data.frame 中?
标签: r geospatial lapply spatial