我正在尝试将MODIS 17数据文件读入R,操纵它们(裁剪等),然后将它们保存为geoTIFF.数据文件.hdf格式化,似乎没有一种简单的方法将它们读入R.
与其他主题相比,没有很多建议,其中大部分都是几年之久.其中一些还建议使用其他程序,但我想坚持使用R.
人们用什么包来处理.hdfR中的文件?
我正在尝试通过将杂乱的站点名称列表与已批准的列表进行匹配来清理数据库。
例如,首选站点名称可能是“Cotswold Water Park Pit 28”,但该站点已输入到数据库中:“Pit 28”、“28”、“CWP Pit 28”和“Cotswold 28”。
数据看起来像这样:
approved <- c("Cotswold Water Park Pit 28", "Cotswold Water Park Pit 14", "Robinswood Hill")
messy <- c("Pit 28", "28", "CWP Pit 28", "Cotswold 28", "14", "Robinswood")
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来将每个元素中的单词/数字(非空格字符簇)messy与approved. 理想情况下,我最终会得到这样的结果:
Cotswold Water Park Pit 28 Cotswold Water Park Pit 14 Robinswood Hill
[1,] "Pit 28" "Pit 28" "Robinswood"
[2,] "28" "CWP Pit 28" NA
[3,] "CWP Pit 28" "14" NA
[4,] "Cotswold 28" NA NA
Run Code Online (Sandbox Code Playgroud)
这些approved …
我正在尝试使用ggmap创建一个我正在使用谷歌地球下面的卫星图像工作的保护区域的地图.我可以制作一个非常令人满意的图像,除了它没有北箭头和比例尺:
我知道有很长的方法来添加这些元素(例如这里),但肯定有一种更简约的方式来做到这一点!
我已经尝试使用map.scale和north.arrow,但这些都让我:
Error in polygon(xb + arrow.x * s, yb + arrow.y * s, ...) :
plot.new has not been called yet
Run Code Online (Sandbox Code Playgroud)
我可以得到两个map.scale并north.arrow使用基地R工作,plot但后来我无法正确绘制我的卫星图像.我也可以得到我想要的使用arrows和text在基础R但同样,这些不会ggmap工作.
我正在使用的代码如下.您将不会拥有多边形(因此我不会将其包含在代码中),但您将能够加载Google地球图像并复制错误.
library(rgdal)
library(ggmap)
library(GISTools)
# Load satellite picture
map.centre <- c(lon = 35, lat = -2.5)
map <- get_map(location=map.centre, source="google", maptype="satellite", zoom = 8)
# Plot map
ggmap(map, extent= "device")
map.scale(xc= 34, yc= -3, len= 10, units= "Kilometers",
ndivs= 4, …Run Code Online (Sandbox Code Playgroud) 我有一个RasterBrick,包含7年以上的月降雨量数据,所以它有7层,每层有12个插槽:
rainfall <- brick("Rainfall.tif")
> rainfall
class : RasterBrick
dimensions : 575, 497, 285775, 7 (nrow, ncol, ncell, nlayers)
resolution : 463.3127, 463.3127 (x, y)
extent : 3763026, 3993292, -402618.8, -136213.9 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs
data source : in memory
names : layer.1.1, layer.2.1, layer.1.2, layer.2.2, layer.1, layer.2, layer
min values : 239.6526, 499.8343, 521.0316, 617.2896, 596.0397, 663.6633, 298.0572
max values : 691.9075, 1158.2064, 1184.9858, 1198.7121, 1241.8077, 1114.7598, 832.6042 …Run Code Online (Sandbox Code Playgroud) 我在 ggplot 中正确显示黄土线时遇到问题。我有几个变量,其中没有一个可以低于零,例如身高、体重和丰度。我正在尝试用黄土线在 ggplot 中绘制这些数据。使用一些虚构的数据:
library(ggplot2)
df <- as.data.frame(rep(1:7, each = 5))
df[,2] <- c(0,1,5,0,6,0,7,2,9,1,1,18,4,2,34,8,18,24,56,12,12,18,24,63,48,
40,70,53,75,98,145,176,59,98,165)
names(df) <- c("x", "y")
ggplot(df, aes(x=x, y=y)) +
geom_point() +
geom_smooth() +
scale_y_continuous(limits = c(-20,200))
Run Code Online (Sandbox Code Playgroud)
这很好,只是显示平滑线周围置信区间的阴影区域低于零,并且审阅者指出这是不可能的,并要求我更改它。我认为通过将 y 轴的下限设置为零可以轻松完成此操作:
ggplot(df, aes(x=x, y=y)) +
geom_point() +
geom_smooth() +
scale_y_continuous(limits = c(0,200))
Run Code Online (Sandbox Code Playgroud)
但这使得黄土线周围的部分阴影区域消失了。有没有一种方法可以使绘图在 y 轴限制为零的情况下工作,以便切断部分阴影区域,或者首先对黄土线设置限制,以便它不会创建阴影低于零的区域?
我试图在一个图中绘制五个栅格。我可以轻松地做到这一点,par()但我希望我的多重绘图是对称的,顶部栅格居中。创建一个虚拟图效果很好:
m <- rbind(c(1, 1), c(2, 3), c(4,5))
print(m)
[,1] [,2]
[1,] 1 1
[2,] 2 3
[3,] 4 5
layout(m)
layout.show(5)
Run Code Online (Sandbox Code Playgroud)
但当我尝试使用光栅时,一切都出了问题:
m <- rbind(c(1, 1), c(2, 3), c(4,5))
layout(m)
plot(rast1)
plot(shape, add=TRUE)
plot(rast2)
plot(shape, add=TRUE)
plot(rast3)
plot(shape, add=TRUE)
plot(rast4)
plot(shape, add=TRUE)
plot(rast5)
plot(shape, add=TRUE)
Run Code Online (Sandbox Code Playgroud)
添加到每个地块中的“形状”只是我正在研究的保护区的轮廓。底部的三个看起来位置正确,但显然不是顶部的。假设底部 3 个位置正确,我还想让每个都更大。
我尝试过改变情节边距,但这只会让事情变得更糟。我也尝试使用image()而不是按照此处的plot()建议使用,但我刚刚收到错误消息。
作为可重现的示例,您可以使用:
library(raster)
r <- raster(ncols=5, nrows=5, xmn=1, xmx=5, ymn=1, ymx=5)
rast1 <- setValues(r, rnorm(25))
rast2 <- setValues(r, rnorm(25))
rast3 <- setValues(r, rnorm(25))
rast4 …Run Code Online (Sandbox Code Playgroud) 我正在使用半变异函数研究数据中的空间自相关。我的数据:
Response <- c(21L, 36L, 30L, 29L, 30L, 45L, 100L, 0L, 0L, 0L, 0L, 0L, 59L,
18L, 24L, 23L, 26L, 29L, 23L, 21L, 14L, 30L, 43L, 14L, 8L, 0L,
0L, 0L, 0L, 0L, 23L, 38L, 20L, 28L, 45L, 21L, 46L, 23L, 6L, 4L,
0L, 0L, 0L, 0L, 0L, 17L, 10L, 41L, 24L, 31L, 16L, 23L, 31L, 6L,
2L, 0L, 0L, 0L, 0L, 0L, 8L, 20L, 18L, 18L, 40L, 9L, 1L, 25L,
4L, 34L, 0L, 0L, 0L, 0L, 0L, 39L, 8L, …Run Code Online (Sandbox Code Playgroud) 我在R中有一个包含84层的光栅堆栈/砖块,我试图根据199911到200610(1999年11月到2006年10月)的年份和月份命名它们.但是由于某些原因,R不断在我给我的图层的任何名字的开头添加"X".
有谁知道为什么会这样,以及如何解决它?以下是我尝试过的一些方法:
# Import raster brick
rast <- brick("rast.tif")
names(rast)[1:3]
[1] "MonthlyRainfall.1" "MonthlyRainfall.2" "MonthlyRainfall.3"
## Method 1
names(rast) <- paste0(rep(1999:2006, each=12), 1:12)[11:94]
names(rast)[1:3]
[1] "X199911" "X199912" "X20001"
## Method 2
# Create a vector of dates
dates <- format(seq(as.Date('1999/11/1'), as.Date('2006/10/1'), by='month'), '%Y%m')
dates[1:3]
[1] "199911" "199912" "200001"
# Set names
rast <- setNames(rast, dates)
names(rast)[1:3]
[1] "X199911" "X199912" "X200001"
## Method 3
names(rast) <- paste0("", dates)
names(rast)[1:3]
[1] "X199911" "X199912" "X200001"
## Method 4
substr(names(rast), 2, 7)[1:3]
[1] "199911" "199912" …Run Code Online (Sandbox Code Playgroud) 我想将我的数据帧的一列(并且只有一列)中的所有NA转换为"非PA".该列的类是因子.
过去我成功使用过:
df$column[is.na(df$column)] <- "non-PA"
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,这次我收到此错误消息:
In `[<-.factor`(`*tmp*`, is.na(management.points$management),
value = c(NA, : invalid factor level, NA generated
Run Code Online (Sandbox Code Playgroud)
我已经尝试将列转换为字符和其他各种方法,但我仍然得到相同的错误消息.我究竟做错了什么?