0

我在ifelse这里有一个棘手的任务。下面是我的代码显示两个时期(futurecurrent)的数据。数据mean, 5th and 95th在 xy 坐标旁边具有置信界限。我想比较两个 dfs (和) 的mean, 5th and 95th置信界限 (CI )。futurecurrent

条件:

1) 如果CIsforfuture不与currentfutrue 重叠,且 CI 高于当前,则pch=2.

2) 如果CIsfor与 futruefuture不重叠,current且 CI 低于当前,则pch=3.

3) 如果未来的 CI 与当前的 CI 重叠,则pch=4

library(raster)
library(rasterVis)

    s <- stack(replicate(2, raster(matrix(runif(100), 3))))
    current <- data.frame(coordinates(sampleRandom(s, 3, sp=TRUE)),
                     C5th=c(17.643981,16.83572,9.979904),
                     CMean=c(26.66364,19.74286,15.10000),C95th=c(35.68329,22.64999,20.22010))


    future <- data.frame(coordinates(sampleRandom(s, 3, sp=TRUE)),
                          C5th=c(17.643981,16.83572,9.979904)*2,
                          CMean=c(26.66364,19.74286,15.10000)*2,C95th=c(35.68329,22.64999,20.22010)*2)

然后将上述三个的结果conditions添加到我的地图中。类似的东西(只是一个尝试):

levelplot(s, margin=FALSE, at=seq(0, 1, 0.05)) + 
  layer(sp.points(xy, pch=ifelse(condition, 2, 3,4), cex=2, col=1), columns=1) +
  layer(sp.points(xy, pch=ifelse(condition, 2, 3,4), cex=2, col=1), columns=2)

例如,在下图中,如果 NFC 的最小值(future)完全高于 AFC 的最大值(current),则条件 1。如果 NFC 的最大值完全低于 AFC 的最小值,则条件 1。如图所示下面满足条件3。

在此处输入图像描述

请帮忙。在。

4

1 回答 1

1

如果您SpatialPointsDataFrame使用根据您需要的条件定义的附加分类变量来定义一个完整的对象,则会更容易。

library(raster)
library(rasterVis)

s <- stack(replicate(2, raster(matrix(runif(1000), 3))))
## Coordinates
cc <- sampleRandom(s, 3, sp = TRUE)
## Data
current <- data.frame(C5th=c(17.643981,16.83572,9.979904),
                      CMean=c(26.66364,19.74286,15.10000),
                      C95th=c(35.68329,22.64999,20.22010))

future <- data.frame(C5th=c(17.643981,16.83572,9.979904)*2,
                     CMean=c(26.66364,19.74286,15.10000)*2,
                     C95th=c(35.68329,22.64999,20.22010)*2)

cf <- data.frame(current, future)
## Define a categorical variable checking the conditions you need
cf$class <- with(cf,
                 ifelse(C5th > C95th.1, 'A',
                        ifelse(C95th < C5th.1, 'B',
                               ifelse(C5th < C95th.1 && C5th > C5th.1, 'C', 'D')
                               )
                        )
                 )
cf$class <- factor(cf$class)

## Build a SPDF object with the coordinates and data
pp <- SpatialPointsDataFrame(cc, cf)

这个对象可以用 显示spplot。有了它,您可以选择符号、尺寸等。

levelplot(s) + spplot(pp["class"],
                      pch = 21:23,
                      col.regions = 'gray')
于 2015-03-22T15:05:15.630 回答