小编89_*_*ple的帖子

R-根据因子水平分割直方图

这是我的数据:

type<-rep(c(0,1),100) 
diff<-rnorm(100)
data<-data.frame(type,diff)
Run Code Online (Sandbox Code Playgroud)

如果我想绘制历史图diff,我这样做:

hist(data$diff)
Run Code Online (Sandbox Code Playgroud)

但是我想要做什么来分割我的直方图type.我能做到这一点:

par(mfrow=c(1,2))
hist(data$diff[data$type==0])
hist(data$diff[data$type==1])
Run Code Online (Sandbox Code Playgroud)

但这给我的是两个不同的直方图.我想要做的就是生产出一个直方图diff0一侧及diff1,在另一侧.像这样的东西,条形连续,没有断裂或边界.这可能意味着轴将被分成两个因子. 在此输入图像描述

r histogram levels

16
推荐指数
2
解决办法
6万
查看次数

过滤每组的中间行

df <- data.frame(id=c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3), 
             x=c(1,2,3,3,5,1,4,3,1,2,8,9,3,1,0))
Run Code Online (Sandbox Code Playgroud)

对于每个组,如果我想过滤第一行

 df %>%
 group_by(id) %>%
filter(row_number()==1)
Run Code Online (Sandbox Code Playgroud)

如果我必须过滤最中间的行,我该怎么办?

r filter dplyr

8
推荐指数
1
解决办法
217
查看次数

使用 ggplot 绘制 shapefile 和 gganimate 动画

样本数据

library(raster)
library(ggplot2)

my.shp <- getData('GADM', country = 'FRA', level = 1)
plot(my.shp)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果我想使用 ggplot 绘制此数据:

my.shp_f <- fortify(my.shp, region = "ID_1")
ggplot(data = my.shp_f, aes(long, lat, group = group)) + geom_polygon(fill = "grey80")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

问题一:为什么行政边界消失了?

问题 2: 我有另一个数据框,其中包含每个行政区划从第 1 天到第 365 天的 2 年日降雨量数据。

rain.data <- data.frame(ID_1 = rep(my.shp@data$ID_1, each = 2 * 365),
                        year = rep(rep(1981:1982, each = 365), times = 2),
                        day = rep(1:365, times = 4),
                        rain = sample(1:20, replace = T, 2 * 365 * …
Run Code Online (Sandbox Code Playgroud)

r shapefile ggplot2 rgdal gganimate

6
推荐指数
1
解决办法
1575
查看次数

使用R自动下载数据

我想从该网站下载每个State X作物年度X标准报告组合的pdf或excel中的所有数据。

我按照本教程做我想做的事。 从URL下载数据

但是,我在第二行遇到了一个错误。

driver <- rsDriver()

Error in subprocess::spawn_process(tfile, ...) : 
group termination: could not assign process to a job: Access is denied
Run Code Online (Sandbox Code Playgroud)

我可以使用其他方法下载这些数据吗?

selenium curl r download web-scraping

6
推荐指数
1
解决办法
246
查看次数

在栅格中生成移动时间序列

我有一个看起来像这样的栅格:

library(raster)

# Create data
set.seed(123)
r <- raster(ncols=10, nrows=10)
r[] <- sample(10:360, ncell(r),replace = T)
crs(r) <- "+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 +ellps=WGS84"
projection(r)
plot(r)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

对于每个网格,栅格包含一年中的某一天作为值.我正在寻找一种生成地图(可能是动画)的方法,从第1天到第365天,当地图到达与网格日相匹配的那天时,网格应该变为绿色.

我很抱歉,但由于我不知道R中是否有可能这样做,我无法生产我所尝试过的东西.

谢谢

编辑

我能想到的一种方法是运行这样的循环:

for(i in 2:365){

    breakpoints <- c(1,i,365)
    colors <- c("green4","white")
    plot(r, breaks = breakpoints,col=colors)
}
Run Code Online (Sandbox Code Playgroud)

将每个循环的ouptut保存为.png,然后开发它的.gif图像

r raster

5
推荐指数
1
解决办法
483
查看次数

使用多个属性的color shapefile

library(raster)
admin <- getData('GADM', country='FRA', level=2)

set.seed(123)

id <- data.frame(ID_2 = admin@data$ID_2, day1 = sample(1:20,96,replace = T), 
                                   day2 = sample(50:80,96,replace = T), 
                                   day3 = sample(120:140,96,replace = T), 
                                   day4 = sample(200:230,96,replace = T))

 admin.shp <- merge(admin,id)
Run Code Online (Sandbox Code Playgroud)

如果我想用要么色彩的情节day1,day2,day3或者day4,我可以这样做:

plot(admin.shp, col = admin.shp@data$day1)
Run Code Online (Sandbox Code Playgroud)

我想要做的是生成某种从第1天到第230天的.gif文件或动画:

  range <- c(min(id$day1),max(id$day4))
Run Code Online (Sandbox Code Playgroud)

如果日期与值匹配day1,则多边形应变为绿色,如果在第2天匹配多边形应变为蓝色,如果在第3天匹配多边形应变为橙色,如果在第4天匹配多边形应变为红色

如果我必须为一个列(例如day1)执行此操作,我可以这样做:

library(magick)
c(min(id$day1),max(id$day1)) # 1, 20  

for(i in 1:20){

   breaks.pl <- c(0, i, 21) 
   col.pl <- c("green4","white")
   cuts.pl <- cut(data.frame(admin.shp)[, "day1"],breaks = breaks.pl)

   png(paste0(i,".png"), width …
Run Code Online (Sandbox Code Playgroud)

plot r shapefile default.png .git-folder

5
推荐指数
1
解决办法
216
查看次数

在R中生成相同颜色的不同阴影

我想生成从浅色调到深色调的不同色调

colfunc <- colorRampPalette(c("green", "red"))
colfunc(10)

plot(rep(1,10),col=colfunc(10),pch=19,cex=3)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果我尝试为单一颜色运行它

 colfunc <- colorRampPalette("green")
 colfunc(10)
 [1] "#00FF00" "#00FF00" "#00FF00" "#00FF00" "#00FF00" "#00FF00"
 [7] "#00FF00" "#00FF00" "#00FF00" "#00FF00"
Run Code Online (Sandbox Code Playgroud)

它返回给我相同的值。我怎样才能生成一种颜色的不同色调,比如从浅绿色到深绿色?

plot r colors color-palette

5
推荐指数
1
解决办法
3683
查看次数

找到给定点的最近多边形

我有一个SpatialPointsDataFrame和一个SpatialPolygons。我想检查 中的每个点SpatialPointsDataFrame,它位于哪个多边形中SpatialPolygons

我可以使用以下方法sp::over来实现此目的:

但是,对于某些点位于SpatialPointsDataFrame多边形的边缘或外部的情况,在这种情况下,我想从 SpatialPolygons. 这是示例数据集:

set.seed(1)
library(raster)
library(rgdal)
library(rgeos)
  
p <- shapefile(system.file("external/lux.shp", package="raster"))
p2 <- as(1.5*extent(p), "SpatialPolygons")
proj4string(p2) <- proj4string(p)
pts <- spsample(p2, n=10, type="random")
  
## Plot to visualize
plot(p, col=colorRampPalette(blues9)(12))
plot(pts, pch=16, cex=.5,col="red", add = TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

over(pts, p)
  
ID_1       NAME_1 ID_2     NAME_2 AREA
1     1     Diekirch    3    Redange  259
2    NA         <NA>   NA       <NA>   NA
3    NA         <NA>   NA       <NA>   NA
4    NA         <NA>   NA …
Run Code Online (Sandbox Code Playgroud)

r r-sp r-sf

5
推荐指数
2
解决办法
753
查看次数

使用 rgee 提取地球引擎中图像收集的多个经纬度值

我有一个经纬度数据框,我想从“NASA/NEX-GDDP”数据集中提取每日降雨数据,该数据集是每日时间分辨率和 0.25 度空间分辨率。我的思考过程是

  1. 在我的本地驱动器上下载每日光栅。因此对于给定年份,将有 365 个栅格
  2. 提取我的经纬度的每个每日栅格的值
  3. 删除每日光栅以节省磁盘空间

我需要这样做很多年。上述步骤非常耗时,尤其是步骤 1。有什么方法可以直接提取每日数据,而不必下载栅格。以下是我目前的做法

  library(rgee)
  ee_Initialize(email = 'xxxx@gmail.com')
  
  # define a bounding box within which my lat lon lies 
  polygon <- ee$Geometry$Polygon(
    list(
      c(-76.12, -36.69),
      c(-15.42,-36.69),
      c(-15.42, 6.71),
      c(-76.12, 6.71),
      c(-76.12, -36.69)
    ))
  
  latlon <- structure(list(lat = c(-11.125, -11.125, -10.875, -10.875, -10.875, -10.875, -10.875, -10.875), 
                           lon = c(-37.375, -37.125, -70.625, -70.375, -70.125, -69.875, -69.625, -69.375)), 
                      class = "data.frame", row.names = c(NA, -8L))
  
  model_ref <- 'ACCESS1-0' 
  rcp_ref <- 'historical'
  year_ref <- 2005
  
  Imagecollection_pr <-
    ee$ImageCollection("NASA/NEX-GDDP")$ …
Run Code Online (Sandbox Code Playgroud)

r google-earth-engine rgee

5
推荐指数
0
解决办法
400
查看次数

将低于阈值的值转换为1

假设我有以下数据

x <- rnorm(100)
Run Code Online (Sandbox Code Playgroud)

我想创建另一个列,其中if x等于或大于0.2,给它一个值1或者0.

if-statement r

4
推荐指数
3
解决办法
126
查看次数