R提供最大值和最小值,但除了从整个向量中排序而不是从此向量中选取值x之外,我没有看到在序列中找到另一个值的快速方法.
是否有更快的方法来获得第二高的值(例如)?
谢谢
我有一个包含局部变量的大数据框(~130000 行)和另一个包含物种密度的大数据框(~7000 行)。两者都有 x 和 y 坐标,但这些坐标并不总是匹配。例如:
df1 <- data.frame(X = c(2,4,1,2,5), Y = c(6,7,8,9,8), V1 = c("A", "B", "C", "D", "E"), V2 = c("G", "H", "I", "J", "K"))
Run Code Online (Sandbox Code Playgroud)
和:
df2 <- data.frame(X = c(2,4,6), Y = c(5,9,7), Dens = c(12, 17, 10))
Run Code Online (Sandbox Code Playgroud)
如果附近有一个点,我想向 df1 添加一列,其中包含来自 df2 的密度(Dens)。如果附近没有点,我希望它显示为 NA。例如:
X Y V1 V2 Dens
2 6 A G 12
4 7 B H NA
1 8 C I 17
2 9 D J NA
5 8 E K 10
Run Code Online (Sandbox Code Playgroud) 我有两个数据集 A 和 B,它们给出了英国不同点的位置,如下所示:
A = data.frame(reference = c(C, D, E), latitude = c(55.32043, 55.59062, 55.60859), longitude = c(-2.3954998, -2.0650243, -2.0650542))
B = data.frame(reference = c(C, D, E), latitude = c(55.15858, 55.60859, 55.59062), longitude = c(-2.4252843, -2.0650542, -2.0650243))
Run Code Online (Sandbox Code Playgroud)
A 有 400 行,B 有 1800 行。
对于 A 中的所有行,我想找到 A 中的一个点与 B 中三个最近点中的每一个之间的最短距离(以公里为单位),以及 B 中这些点的经纬度参考和坐标。
我尝试使用这篇文章
R - 在给定半径内找到最近的相邻点和相邻点的数量,坐标经纬度
但是,即使我按照所有说明进行操作,主要是使用distmpackage 中的命令geosphere,距离也会以不可能为公里的单位出现。我看不到代码中要更改的内容,尤其是因为我对这些geo包根本不熟悉。
尝试为SpatialPointsDataFrame中的每个点找到第二个SpatialPointsDataFrame中最近点的距离(相当于ArcGIS中两个SpatialPointDataFrames中的"最近"工具).
我可以通过使用gDistance计算所有成对距离并获取min(如此处的答案1)来做天真的实现,但我有一些巨大的数据集,并且正在寻找更高效的东西.
例如,这里有一个关于同一数据集中的点的knearneigh的技巧.
在r-sig-geo上交叉发布
我有一组具有经度和纬度坐标的点。我想从每个点中找出特定半径内的点数。我查看了RANN和FNN包,发现的唯一相关功能是RANN包中的nn2()。但是,我不想预设必须识别的最大或最小点(nn2函数中的k变量)。另外,即使我尝试了nn2中的k(点数)和半径几个不同的值,我也总是得到相同的结果。即使半径设置为非常小或为零。这是我使用的代码示例
points<- nn2(mydata, k=100, radius = 0.02)
Run Code Online (Sandbox Code Playgroud)
关于如何在R中执行此操作的任何想法?
我试图在参考我的原始 data.frame 的 data.frame 中找到最接近的 LAT_LON 的 ID。我已经通过将 data.frames 合并到一个唯一标识符上并根据distHaverSine来自geosphere. 现在,我想更进一步,加入没有唯一标识符的 data.frames 并找到最接近 LAT-LON 的 ID。合并后我使用了以下代码:
v3 <-v2 %>% mutate(CTD = distHaversine(cbind(LON.x, LAT.x), cbind(LON.y, LAT.y)))
数据:
loc <- data.frame(station = c('Baker Street','Bank'),
lat = c(51.522236,51.5134047),
lng = c(-0.157080, -0.08905843),
postcode = c('NW1','EC3V'))
Run Code Online (Sandbox Code Playgroud)
stop <- data.frame(station = c('Angel','Barbican','Barons Court','Bayswater'),
lat = c(51.53253,51.520865,51.490281,51.51224),
lng = c(-0.10579,-0.097758,-0.214340,-0.187569),
postcode = c('EC1V','EC1A', 'W14', 'W2'))
Run Code Online (Sandbox Code Playgroud)
作为最终结果,我想要这样的东西:
df <- data.frame(loc = c('Baker Street','Bank','Baker Street','Bank','Baker Street','Bank','Baker
Street','Bank'),
stop = c('Angel','Barbican','Barons Court','Bayswater','Angel','Barbican','Barons Court','Bayswater'),
dist = …Run Code Online (Sandbox Code Playgroud) 给定一个具有纬度和经度的数据框,我想添加一个列,该列仅包含特定半径内(例如该特定点的 10 公里内)的其他点(同一数据框的)的计数。
示例数据:
set.seed(1)
radius<-10
lat<-runif(10,-90,90)
long<-runif(10,-180,180)
id<-1:10
dat<-cbind(id,lat,long)
id lat long
[1,] 1 -42.20844 -105.8491530
[2,] 2 -23.01770 -116.4395691
[3,] 3 13.11361 67.3282248
[4,] 4 73.47740 -41.7226614
[5,] 5 -53.69725 97.1429112
[6,] 6 71.71014 -0.8282728
[7,] 7 80.04155 78.3426630
[8,] 8 28.94360 177.0861941
[9,] 9 23.24053 -43.1873354
[10,] 10 -78.87847 99.8802797
Run Code Online (Sandbox Code Playgroud)
现在给定半径变量,我想要一个新列说“X”,每个点只包含“半径”内的其他点的数量。我不在乎这些是哪一点。
虽然这个R - 在给定半径内找到最近的相邻点和相邻点的数量,坐标经纬度主题和答案接近它并没有解决简单计数的具体问题。这个问题是不同的,因为我需要半径内所有点的计数而不是点数