这是我的数据:
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)
但这给我的是两个不同的直方图.我想要做的就是生产出一个直方图diff
的0
一侧及diff
的1
,在另一侧.像这样的东西,条形连续,没有断裂或边界.这可能意味着轴将被分成两个因子.
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)
如果我必须过滤最中间的行,我该怎么办?
样本数据
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) 我想从该网站下载每个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)
我可以使用其他方法下载这些数据吗?
我有一个看起来像这样的栅格:
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图像
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) 我想生成从浅色调到深色调的不同色调
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)
它返回给我相同的值。我怎样才能生成一种颜色的不同色调,比如从浅绿色到深绿色?
我有一个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) 我有一个经纬度数据框,我想从“NASA/NEX-GDDP”数据集中提取每日降雨数据,该数据集是每日时间分辨率和 0.25 度空间分辨率。我的思考过程是
我需要这样做很多年。上述步骤非常耗时,尤其是步骤 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) 假设我有以下数据
x <- rnorm(100)
Run Code Online (Sandbox Code Playgroud)
我想创建另一个列,其中if x
等于或大于0.2,给它一个值1或者0.