【问题标题】:How do I subset/filter a data.frame by coordinates如何按坐标子集/过滤 data.frame
【发布时间】:2021-04-27 21:49:34
【问题描述】:

我正在尝试对包含 X= lon/y = 纬度坐标和 z= 以米为单位的高程的 data.frame (A) 进行子集化。 我有数千个这样的高程点,我想提取其中的 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

你能给我一些建议吗? 非常感谢!

卡米拉 (请原谅我的无能,我对此很陌生)

【问题讨论】:

    标签: r dataframe filter coordinates subset


    【解决方案1】:

    你可以使用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), ]
    

    注意:下次请提供可重现的数据示例。您应该在我的回答中定义df1df2,而不是让我这样做。

    【讨论】:

    • 哦,哇,谢谢你,@Leonardo 很有帮助!我会努力在问题上做得更好,谢谢!卡米拉
    • 为什么不 merge,与 inner_join 完全对应的 R 基数?
    • 你是对的!然而,我给出了两种可能的方法:使用dplyrinner_join(隐藏进程)和使用r-base 的显式方法。当然merge函数也和inner_join做同样的事情
    • @Kamilla,如果我的回答解决了你的问题,你可以接受!
    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2015-06-27
    • 2011-06-20
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    相关资源
    最近更新 更多