Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将砖中的每个光栅层与数据帧R中的值关联起来_R_Dataframe_Correlation_Raster - Fatal编程技术网

将砖中的每个光栅层与数据帧R中的值关联起来

将砖中的每个光栅层与数据帧R中的值关联起来,r,dataframe,correlation,raster,R,Dataframe,Correlation,Raster,我在R中有这个数据帧: library(raster) # create a random dataframe with yearly values for each column df <- data.frame(year = seq(1981,2012), a = runif(32,1,33), b = rnorm(32, 6, 18), c = rnorm(32, 3, 12), d = rnorm(32, 0, 18)) 库(光栅)

我在R中有这个数据帧:

library(raster)    

# create a random dataframe with yearly values for each column
df <- data.frame(year = seq(1981,2012), a = runif(32,1,33), b = rnorm(32, 6, 18), c = rnorm(32, 3, 12), 
                 d = rnorm(32, 0, 18))
库(光栅)
#创建一个随机数据框,每个列具有年度值

我不知道你到底想做什么。
df
的每列中有32个值,光栅堆栈中有32个层和400个值

也许您正在查找
df
中列的相关性和层的平均值?你可以这样做:

你的数据

set.seed(0)
df <- data.frame(year = seq(1981,2012), a=runif(32,1,33), b=rnorm(32, 6, 18), c=rnorm(32, 3, 12), d=rnorm(32, 0, 18))
r <- raster(nrow=20, ncol=20, ext=extent(20,30,43,49))
rs <- stack(lapply(1:32, function(i) setValues(r, rnorm(400,20,20))))
years <- seq(as.Date("1981-01-01"), as.Date("2012-12-31"), by = "years")
names(rs) <- years
set.seed(0)

df嗯,我想出了一个解决办法;不知道这是不是最好的,但我认为是有效的。 以下是df中a列的示例;我为a列中的每一行创建了一个虚拟光栅层;之后,我使用corLocal进行关联:

### create a raster layer for each row (year) for column 'a' in df
rs.r <- stack()
library(data.table)

### extract x and y coordinates for raster rs to create a raster stack 
cord <- rasterToPoints(rs[[1]], spatial = F)
cord<- cord[,1:2]
head(cord)

### create a raster where each layer is the value in column a from df
year.s <- unique(df$year)

for (i in 1:length(df$year)){
  print(df$year[i])
  re <- df$a[df$year==year.s[i]]
  c <- data.table(x = cord[,1], y = cord[,2], tt = re)
  m <- rasterFromXYZ(c)
  crs(m) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 "
  rs.r <- addLayer(rs.r, m)
  crs(rs.r) <-" +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
}

names(rs.r) <- df$year ### set the names for the layers

ext <- extent(rs)
rs.r <- setExtent(rs.r, ext)


rs.r<- projectRaster(rs.r, rs,method = 'ngb')

spplot(corLocal(rs.r, rs, 'spearman'))
###为df中的列“a”的每行(年)创建一个光栅层

谢谢你的提示。实际上,我希望从df中获得每列与rs值的相关性光栅。基本上,光栅堆栈中的每个像素与基于年份列的每列df值的相关性。结果应该是一个包含5层的堆栈(您将通过corLocal函数获得)。然而,我将尝试在你的例子上构建一些东西。要计算相关性,你需要两个长度相同的向量。您希望将1个值与32个值进行比较。你可以用它来计算一些统计数据,但不能计算相关系数。
x <- cellStats(rs, mean)
sapply(2:5, function(i) cor(x, df[,i]))
#[1]  0.123391584 -0.007801092 -0.124336155  0.060774465
### create a raster layer for each row (year) for column 'a' in df
rs.r <- stack()
library(data.table)

### extract x and y coordinates for raster rs to create a raster stack 
cord <- rasterToPoints(rs[[1]], spatial = F)
cord<- cord[,1:2]
head(cord)

### create a raster where each layer is the value in column a from df
year.s <- unique(df$year)

for (i in 1:length(df$year)){
  print(df$year[i])
  re <- df$a[df$year==year.s[i]]
  c <- data.table(x = cord[,1], y = cord[,2], tt = re)
  m <- rasterFromXYZ(c)
  crs(m) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 "
  rs.r <- addLayer(rs.r, m)
  crs(rs.r) <-" +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"
}

names(rs.r) <- df$year ### set the names for the layers

ext <- extent(rs)
rs.r <- setExtent(rs.r, ext)


rs.r<- projectRaster(rs.r, rs,method = 'ngb')

spplot(corLocal(rs.r, rs, 'spearman'))