如何在R中编辑多个条件的数据集?

时间:2013-05-18 03:46:55

标签: r variables csv edit

假设我在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

我该怎么做?

2 个答案:

答案 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.table而不是data.frame,它有一些更长的学习曲线,但它使语法更清晰,工作更快:

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

DT[longitude >= 0 & longitude <= 50 & latitude >= -20 & latitude <=  45]