2

假设我在 R 中有一大组数据,其中包含变量纬度、经度、震级和深度(对于地震),我想创建一个新数据集,其中包括所有变量的数据,但仅限于纬度和经度的某些值之间. 例如,我想要在 0 到 50 经度和 -20 到 45 纬度之间的地震(但我希望震级和深度仍然对应于正确的经度和纬度)。有没有一种简单的方法可以做到这一点?例如:

latitude longitude magnitude depth
45        45         1.0        5
-10       -10        4.5        6
-76       12         2.435      18

我想选择纬度在-80到0之间,经度在0到50之间的数据,所以唯一匹配的列是:

latitude, longitude magnitude depth
-76       12         2.435      18

我怎样才能做到这一点?

4

2 回答 2

1
> #Use [ to extract the rows directly
> #See ?Comparison and ?Arithmetic for the operators
> x[x$latitude > 0 & x$latitude < 80 & x$longitude > 0 & x$longitude < 50, ]
  latitude longitude magnitude depth
1       45        45         1     5
> #Or the slightly more readable subset() function
> subset(x, latitude > 0 & latitude < 80 & longitude > 0 & longitude < 50)
  latitude longitude magnitude depth
1       45        45         1     5
> #see ?Extract or ?subset
> #Also read the help manual for a good intro: http://cran.r-project.org/doc/manuals/R-intro.html
于 2013-05-18T04:06:54.200 回答
0

您可以索引您的 data.frame,DF如下所示:

DF[DF$longitude >= 0 & DF$longitude <= 50 & 
   DF$latitude >= -20 & DF$latitude <=  45, ]

 latitude longitude magnitude depth
       45        45         1     5

这是一个细分:

[括号内的语句]正在索引 data.frame; 更具体地说,data.frame 的

R您可以使用TRUE/向量进行索引(除了FALSE其他选项)。因此,我们可以创建一个向量,TRUE只要一行在地理范围内和FALSE在这些范围之外,它就具有价值。

将边界定义为盒子的四个“边”,即询问坐标是否在下限之上和上限之下。

我们使用单个&运算符,而不是,因为我们希望每一行 都有&&一个唯一的值。如果最后一行不清楚,请查看以下内容之间的区别:

x <- 1:5
x > 1 &  x < 4

# compare: 
x > 1 && x < 4

data.table 解决方案:

如果您想使用 data.table 而不是 data.frame,它的学习曲线会更长一些,但它可以使语法更简洁,工作更快:

library(data.table)
DT <- data.table(DF)

DT[longitude >= 0 & longitude <= 50 & latitude >= -20 & latitude <=  45]
于 2013-05-18T04:02:32.683 回答