基于第二个数据框中的值范围的子集数据框
Subset data frame based on range of values in second data frame
我正在尝试根据第二个数据框的值周围的范围创建一个数据框的子集,我一直在研究,但我就是不知道如何去做。我在这里使用了虚拟数据,因为它们都是具有许多列的大型数据集。
数据帧 1 (df1) 有 50 列,不同纬度的数千条记录
Recording
Latitude
BombusL
51.41
ApisM
51.67
BombusR
51.34
Data Frame 2 (df2) 有数百个不同纬度的城镇,明显小于 df1
Town
Lat
Bristol
51.40
Merton
51.42
Horsham
51.33
我需要 df1 的一个子集,它只包含纬度在 df2 中纬度的 0.01 以内的行。因此代码需要查看 df1 的每一行并针对 df2 的每一行测试该数字。输出将仅包括来自 df1 的行,其中纬度值在 df2$Latitude 中的值的 0.01 范围内。
在示例中,将包含以下行
Recording
Latitude
BombusL
51.41
BombusR
51.34
我有代码的开头来做一个过滤器,然后我可以 运行 通过数据框来创建子集
LatFil <- df1$latitude %in% df2$latitude)
但是我想不通怎么进入df2$latitude中值的±0.01的逻辑测试
当涉及精度时(即加减0.01,是浮点数),使用比较运算符可能比固定匹配更好
subset(df1, (Latitude >= (df2$Lat - 0.01)) &
(Latitude <= (df2$Lat + 0.01)))
另一个选项:
df2$Lat_hi <- df2$Lat + 0.01
df2$Lat_lo <- df2$Lat - 0.01
LatFil <- df1[df1$Latitude %in% c(df2$Lat, df2$Lat_hi, df2$Lat_lo),]
我正在尝试根据第二个数据框的值周围的范围创建一个数据框的子集,我一直在研究,但我就是不知道如何去做。我在这里使用了虚拟数据,因为它们都是具有许多列的大型数据集。
数据帧 1 (df1) 有 50 列,不同纬度的数千条记录
Recording | Latitude |
---|---|
BombusL | 51.41 |
ApisM | 51.67 |
BombusR | 51.34 |
Data Frame 2 (df2) 有数百个不同纬度的城镇,明显小于 df1
Town | Lat |
---|---|
Bristol | 51.40 |
Merton | 51.42 |
Horsham | 51.33 |
我需要 df1 的一个子集,它只包含纬度在 df2 中纬度的 0.01 以内的行。因此代码需要查看 df1 的每一行并针对 df2 的每一行测试该数字。输出将仅包括来自 df1 的行,其中纬度值在 df2$Latitude 中的值的 0.01 范围内。
在示例中,将包含以下行
Recording | Latitude |
---|---|
BombusL | 51.41 |
BombusR | 51.34 |
我有代码的开头来做一个过滤器,然后我可以 运行 通过数据框来创建子集
LatFil <- df1$latitude %in% df2$latitude)
但是我想不通怎么进入df2$latitude中值的±0.01的逻辑测试
当涉及精度时(即加减0.01,是浮点数),使用比较运算符可能比固定匹配更好
subset(df1, (Latitude >= (df2$Lat - 0.01)) &
(Latitude <= (df2$Lat + 0.01)))
另一个选项:
df2$Lat_hi <- df2$Lat + 0.01
df2$Lat_lo <- df2$Lat - 0.01
LatFil <- df1[df1$Latitude %in% c(df2$Lat, df2$Lat_hi, df2$Lat_lo),]