我有一些十六进制格式的区域标志,例如。“090A”、“3BFF”、“0400”、“2025”。
在SQL中,我可以使用以下语法来计算2个区域标志之间的重叠,例如:
SELECT
STRTOL('090A', 16) as area1
,STRTOL('3BFF', 16) as area2
,STRTOL('090A', 16) & STRTOL('3BFF', 16) as overlap;
| 区域1|区域2|重叠|
| - -----|- -----|- -----|
| 二三一四|15359|二三一四|
这表明区域1完全包括在区域2中。
另一个例子:
SELECT
STRTOL('0400', 16) as area3
,STRTOL('2025', 16) as area4
,STRTOL('0400', 16) & STRTOL('2025', 16) as overlap;
| 区域3|区域4|重叠|
| - -----|- -----|- -----|
| 一零二四|八二二九|0|
这表明在区域3和区域4之间没有重叠。
我看到我们可以使用R.utils::strtoi
,这为我在SQL中获得的每个区域提供了相同的转换。但是如果我使用语法
strtoi("0400", 16L) & strtoi("2025", 16L)
即使没有重叠,也会得到TRUE
。有没有一种方法可以像在SQL中一样使用strtoi
来获得R中的重叠?
1条答案
按热度按时间uyto3xhc1#
你可以使用函数
bitwAnd()
来计算按位和:这是因为
TRUE
是这样的:&
是R中的逻辑与运算符。而大于0的数字则转换为TRUE
。所以你的代码相当于其评估为
TRUE
。