我有一个netCDF文件,我想从纬度/经度边界定义一个子集(即一个纬度/经度定义的框),使用R中的'ncdf'包.
我的netCDF文件摘要如下.它有两个维度(纬度和经度)和1个变量(10U_GDS4_SFC).它本质上是一个包含风值的纬度/长度网格:
[1] "file example.nc has 2 dimensions:"
[1] "lat_0 Size: 1280"
[1] "lon_1 Size: 2560"
[1] "------------------------"
[1] "file example.nc has 1 variables:"
[1] "float 10U_GDS4_SFC[lon_1,lat_0] Longname:10 metre U wind component Missval:1e+30"
Run Code Online (Sandbox Code Playgroud)
纬度变量从+90到-90运行,经度变量从0到360运行.
我希望使用以下地理边界边界提取整个网格的子集:
左下角:Lat:34.5˚,长:355˚,左上角:Lat:44.5˚,长:355˚,右上角:Lat:44.5˚,长:12˚,右下角:Lat:34.5˚ ,长:12˚
我知道可以使用get.var.ncdf()命令提取变量的一部分(下面的例子):
z1 = get.var.ncdf(example.nc, "10U_GDS4_SFC", start=c(11,26), count=c(5,5))
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何合并纬度/经度,以便最终得到包含变量值的子集空间网格.我不熟悉使用R中的netCDF值,我们将非常感谢您的建议.非常感谢!
我有一些角度数据(上的标度0°- 360°).我已经使用'圆形'包装成功地创建了一个圆形图R,但轴标签是逆时针方向读取的,而不是顺时针方向.
我需要纠正这个问题,因为数据和轴标签目前不匹配.标签应从0°- 345°顺时针方向运行.
这是R我用来创建绘图的代码:
library(circular)
# Create circular object / Sample Data
df <- structure(c(345, 355, 351, 359, 358, 359, 359, 357, 352, 3, 6,
4, 342, 336, 349, 352, 340, 354, 335, 348, 355, 353, 354, 346,
351, 359, 358, 357, 348, 336, 349, 351, 355, 354, 356), .Dim = c(35L,
1L), .Dimnames = list(NULL, "Bearing"), circularp = structure(list(
type = "angles", units = "degrees", template = …Run Code Online (Sandbox Code Playgroud) 我有U和V风分量数据,我想从R中的这些值计算风向.
我希望得到0-360度的风向数据,0°或360°表示向北吹来的风,90°表示向东吹来的风,180°表示吹到的风南面和270°表示向西吹来的风.
以下是一些示例数据:
> dput(wind)
structure(list(u_ms = c(-3.711, -2.2417, -1.8188, -1.6164, -1.3941,
-1.0682, -0.57611, -1.5698, -1.4976, -1.3537, -1.0901, -0.60403,
-0.70812, -0.49045, -0.39849, 0.17875, 0.48356, 1.5082, 1.4219,
2.5881), v_ms = c(-1.471, -1.6118, -1.6613, -1.7037, -1.7388,
-1.8748, -1.8359, -1.6766, -1.6994, -1.7505, -1.4947, -0.96283,
-1.1194, -0.6849, -0.7847, -0.80349, -0.19352, -0.97815, -1.0835,
-0.81666), u_rad = c(-0.064769155, -0.039125038, -0.031744042,
-0.028211496, -0.02433163, -0.018643603, -0.010055014, -0.027398173,
-0.026138045, -0.023626517, -0.01902583, -0.01054231, -0.012359023,
-0.008559966, -0.006954961, 0.003119775, 0.008439712, 0.02632305,
0.024816831, 0.045170857), v_rad = c(-0.025673788, -0.028131211,
-0.028995149, -0.029735168, -0.030347779, -0.032721426, -0.032042493, …Run Code Online (Sandbox Code Playgroud) 我想重新对齐/偏移条形图的x轴和相关的刻度标记.这应该很简单,但我找不到答案.以下是一些包含24个类别的示例数据.
xval = c(1:24)
count = c(0.03,0.03,0.08,0.06,0.11,0.4,0.3,0.5,0.5,0.6,0.4,0.1,0.1,0.4,0.2,0.1,0.06,0.05,0.03,0.02,0.01,0.03,0.01,0.02)
df = as.data.frame(cbind(xval, count))
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码轻松地在条形中点处生成带有刻度标记的条形图:
mp <- barplot(df$count, space=0, axes=FALSE)
axis(side=2, pos=-0.2)
axis(side=1, at =mp, labels=df$xval)
Run Code Online (Sandbox Code Playgroud)
我还可以使用下面的方法移动整个x轴(标签和刻度线)以与条形外部对齐(尽管现在无法将最后一个条形图合并到轴中):
axis(side=1, at =mp-0.5, labels=df$xval)
Run Code Online (Sandbox Code Playgroud)
虽然我希望x轴和相关的刻度线与条形边界对齐(即条形两侧的刻度线而不是中心的刻度线),我希望x轴标签保持在条形中点.有没有一种简单的方法来实现这一目标?
我希望将回归线添加到具有多个数据系列的图中,这些数据系列由因子进行颜色编码.使用brewer.pal调色板,我创建了一个图表,其数据点由因子(植物$ ID)着色.以下是代码示例:
palette(brewer.pal(12,"Paired"))
plot(x=plant$TL, y=plant$d15N, xlab="Total length (mm)", ylab="d15N", col=plant$ID, pch=16)
legend(locator(1), legend=levels(factor(plant$ID)), text.col="black", pch=16, col=c(brewer.pal(12,"Paired")), cex=0.6)
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以为每个不同的数据系列(因子)添加线性回归线到图表中?我还希望根据因子植物$ ID对线条进行着色?
我可以通过将每个数据系列分别添加到绘图中然后使用abline函数(如下所示)来实现这一点,但是在具有多个数据系列的情况下,匹配颜色可能非常耗时.
plot(y=plant$d15N[plant$ID=="Sm"], x=plant$TL[plant$ID=="Sm"], xlab="Total length (mm)", ylab="d15N", col="green", pch=16, xlim=c(50,300), ylim=c(8,15))
points(y=plant$d15N[plant$ID=="Md"], x=plant$TL[plant$ID=="Md"], type="p", pch=16, col="blue")
points(y=plant$d15N[plant$ID=="Lg"], x=plant$TL[plant$ID=="Lg"], type="p", pch=16, col="orange")
abline(lm(plant$d15N[plant$ID=="Sm"]~plant$TL[plant$ID=="Sm"]), col="green")
abline(lm(plant$d15N[plant$ID=="Md"]~plant$TL[plant$ID=="Md"]), col="blue")
abline(lm(plant$d15N[plant$ID=="Lg"]~plant$TL[plant$ID=="Lg"]), col="orange")
legend.text<-c("Sm","Md","Lg")
legend(locator(1), legend=legend.text, col=c("green", "blue", "orange"), pch=16, bty="n", cex=0.7)
Run Code Online (Sandbox Code Playgroud)
必须有一个更快的方式!任何帮助将不胜感激.
我想在同一个图上创建一个包含多个数据系列的直方图.我能找到的最佳方法是multhist().我想要一个类似的风格的情节hist(),虽然ggplot()也可以用来执行这个任务,图形样式不是我想要的.
以下是一些示例数据:
df <- structure(list(year = c(2011L, 2011L, 2011L, 2011L, 2011L, 2011L,
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L,
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L), count = c(187L, 199L, 560L, 1000L, 850L,
400L, 534L, 911L, 390L, 1008L, 1173L, 1222L, 810L, 950L, 752L,
1125L, 468L, 710L, 290L, 670L, 855L, …Run Code Online (Sandbox Code Playgroud) 我想计算从第一个观察到最后一个观察的一列中每4个值的标准偏差.我已经找到了许多移动SD功能的答案,但我只需要一行代码来计算sd()每4个数据值,并将答案写入数据框中的新列,如下所示:
示例数据:
Obs Count
1 56
2 29
3 66
4 62
5 49
6 12
7 65
8 81
9 73
10 66
11 71
12 59
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Obs Count SD
1 56 16.68
2 29 16.68
3 66 16.68
4 62 16.68
5 49 29.55
6 12 29.55
7 65 29.55
8 81 29.55
9 73 6.24
10 66 6.24
11 71 6.24
12 59 6.24
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但这显然是不正确的:
a <- for(i in 1: length(df)) sd(df$Count[i:(i+3)])
Run Code Online (Sandbox Code Playgroud)
这应该是一项非常简单的任务,但我无法找到答案.我还在学习,任何帮助将不胜感激.
我有一个数据框,目前包含两个HH:MM:SS格式的'时间'列.我想压缩这个数据框,这样我每个唯一的'id'值只有一行.我想保留每个唯一'id'值的行,该值的'time1'值与'time2'值最接近.但是,'time1'需要大于'time2'.
这是一个简单的例子:
> dput(df)
structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 4L, 4L, 4L, 4L), count = c(23L, 23L, 23L, 23L, 45L, 45L,
45L, 45L, 67L, 67L, 67L, 67L, 88L, 88L, 88L, 88L), time1 = structure(c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 3L), .Label = c("00:13:00",
"01:13:00", "07:18:00", "18:14:00"), class = "factor"), time2 = structure(c(4L,
1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, …Run Code Online (Sandbox Code Playgroud) 我希望使用两者中存在的"日期时间"列合并两个数据集(POSIXct格式:dd/mm/yyyy hh:mm).以下是来自两个数据集的示例数据:
# Dataset 1 (dts1)
datetime count period
1 30/03/2011 02:32 27 561
2 30/03/2011 02:42 3 600
3 30/03/2011 02:52 0 574
4 30/03/2011 03:02 1 550
5 30/03/2011 03:12 15 600
6 30/03/2011 03:22 0 597
# Dateset 2 (dts2)
datetime dist car satd alt
1 30/03/2011 01:59 23.9 1 3 1.76
2 30/03/2011 02:58 14.7 1 7 6.36
3 30/03/2011 03:55 10.4 2 9 -0.34
4 30/03/2011 04:53 35.4 1 3 3.55
5 30/03/2011 05:52 56.1 …Run Code Online (Sandbox Code Playgroud) 我想从datetime列以小时为间隔对数据帧进行子采样,从数据帧第一行的时间值开始.我的数据框从第一行到最后一行每隔10分钟运行一次.示例数据如下:
structure(list(datetime = structure(1:19, .Label = c("30/03/2011 05:09",
"30/03/2011 05:19", "30/03/2011 05:29", "30/03/2011 05:39", "30/03/2011 05:49",
"30/03/2011 05:59", "30/03/2011 06:09", "30/03/2011 06:19", "30/03/2011 06:29",
"30/03/2011 06:39", "30/03/2011 06:49", "30/03/2011 06:59", "30/03/2011 07:09",
"30/03/2011 07:19", "30/03/2011 07:29", "30/03/2011 07:39", "30/03/2011 07:49",
"30/03/2011 07:59", "30/03/2011 08:09"), class = "factor"), a_count = c(66L,
34L, 33L, 20L, 12L, 44L, 36L, 29L, 21L, 22L, 17L, 38L, 24L, 19L,
60L, 54L, 27L, 36L, 45L), b_count = c(166.49, 167.54, 168.31,
168.81, 169.24, 169.61, 169.96, 170.29, 170.63, 170.98, …Run Code Online (Sandbox Code Playgroud)