我如何通过坐标 subset/filter a data.frame
How do I subset/filter a data.frame by coordinates
我正在尝试对 data.frame (A) 进行子集化,其中包含 X= lon/y = 纬度坐标和 z= 海拔(以米为单位)。
我有数千个这样的高程点,我想提取其中的 160 个来使用。
对于这些 160,我还将 X= lon/y = lat 存储在不同的 data.frame (B)
我的问题是如何过滤或子集 data.frame A 以便我只能看到存储在 data.frame (B)
中的点的高程点
Data.frame (A) Data.frame (B)
X Y Z X Y
1. -7.47 5.88 200 -7.47 5.88
2. -8.88 4.55 123 -3.11 9.11
3. -6.32 3.33 233 -8.33 2.44
4. -5.44 2.33 133 -9.21 6.32
5. -4.21 1.22 433
6. -3.11 9.11 111
7. -2.56 10.12 453
8. -9.21 6.32 325
9. -8.33 2.44 712
10. -11.11 5.55 333
所以理想情况下我想要的结果是
data.frame (C)
X Y Z
1. -7.47 5.88 200
2. -3.11 9.11 111
3. -8.33 2.44 712
4. -9.21 6.32 325
你能给我一些建议吗?
非常感谢!
卡米拉
(请原谅我的无能,我对此很陌生)
您可以使用 dplyr
包中的 inner_join()
函数:
df1 <- data.frame(x = c(-7.47, -8.88, -6.32, -5.44, -4.21, -3.11, -2.56, -9.21, -8.33, -11.11),
y = c(5.88, 4.55, 3.33, 2.33, 1.22, 9.11, 10.12, 6.32, 2.44, 5.55),
z = c(200, 123, 233, 133, 433, 111, 453, 325, 712, 333))
df2 <- data.frame(x = c(-7.47, -3.11, -8.33, -9.21),
y = c(5.88, 9.11, 2.44, 6.32))
library(dplyr)
inner_join(df1, df2)
Joining, by = c("x", "y")
x y z
1 -7.47 5.88 200
2 -3.11 9.11 111
3 -9.21 6.32 325
4 -8.33 2.44 712
如果你想在不使用 dplyr
的情况下执行此操作:
df1[(df1$x %in% df2$x) & (df1$y %in% df2$y), ]
注意:请下次提供可复现的数据示例。您应该按照我的回答定义 df1
和 df2
而不是让我这样做。
我正在尝试对 data.frame (A) 进行子集化,其中包含 X= lon/y = 纬度坐标和 z= 海拔(以米为单位)。 我有数千个这样的高程点,我想提取其中的 160 个来使用。 对于这些 160,我还将 X= lon/y = lat 存储在不同的 data.frame (B)
我的问题是如何过滤或子集 data.frame A 以便我只能看到存储在 data.frame (B)
中的点的高程点Data.frame (A) Data.frame (B)
X Y Z X Y
1. -7.47 5.88 200 -7.47 5.88
2. -8.88 4.55 123 -3.11 9.11
3. -6.32 3.33 233 -8.33 2.44
4. -5.44 2.33 133 -9.21 6.32
5. -4.21 1.22 433
6. -3.11 9.11 111
7. -2.56 10.12 453
8. -9.21 6.32 325
9. -8.33 2.44 712
10. -11.11 5.55 333
所以理想情况下我想要的结果是
data.frame (C)
X Y Z
1. -7.47 5.88 200
2. -3.11 9.11 111
3. -8.33 2.44 712
4. -9.21 6.32 325
你能给我一些建议吗? 非常感谢!
卡米拉 (请原谅我的无能,我对此很陌生)
您可以使用 dplyr
包中的 inner_join()
函数:
df1 <- data.frame(x = c(-7.47, -8.88, -6.32, -5.44, -4.21, -3.11, -2.56, -9.21, -8.33, -11.11),
y = c(5.88, 4.55, 3.33, 2.33, 1.22, 9.11, 10.12, 6.32, 2.44, 5.55),
z = c(200, 123, 233, 133, 433, 111, 453, 325, 712, 333))
df2 <- data.frame(x = c(-7.47, -3.11, -8.33, -9.21),
y = c(5.88, 9.11, 2.44, 6.32))
library(dplyr)
inner_join(df1, df2)
Joining, by = c("x", "y")
x y z
1 -7.47 5.88 200
2 -3.11 9.11 111
3 -9.21 6.32 325
4 -8.33 2.44 712
如果你想在不使用 dplyr
的情况下执行此操作:
df1[(df1$x %in% df2$x) & (df1$y %in% df2$y), ]
注意:请下次提供可复现的数据示例。您应该按照我的回答定义 df1
和 df2
而不是让我这样做。