假设我在R中有大量数据,其中包含变量纬度,经度,幅度和深度(用于地震),我想创建一个新数据集,其中包含所有变量的数据,但仅限于某些值之间纬度和经度。例如,我想要地震在0到50经度和-20和45纬度之间(但我希望幅度和深度仍然对应于正确的经度和纬度)。有一个简单的方法来做这个R?例如:
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
我该怎么做?
答案 0 :(得分: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
答案 1 :(得分: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.frame,它有一些更长的学习曲线,但它使语法更清晰,工作更快:
library(data.table)
DT <- data.table(DF)
DT[longitude >= 0 & longitude <= 50 & latitude >= -20 & latitude <= 45]