r - R:基于以不同数据集中的点为中心的特定分布从数据集中采样
问题描述
我正在尝试根据 XY 平面上点的分布从 XYZ 空间中的一组点 df_map 中采样行。分布的均值和标准差在另一个数据集 df_pts 中。
我的数据看起来像这样
> df_map
X Y Z
A 6 0 103
B -4 2 102
C -2 15 112
D 13 6 105
E 1 -3 117
F 5 16 105
G 10 5 103
H 14 -7 119
I 8 14 107
J -8 -4 100
> df_pts
x y accuracy
a 5 18 -0.8464018
b 3 2 0.5695678
c -18 14 -0.4711559
d 11 13 -0.7306417
e -3 -10 2.1887011
f -9 -11 2.1523923
g 5 1 -0.9612284
h 12 -19 -0.4750582
i -16 20 -1.4554292
j 0 -8 3.4028887
(df_pts[i, x], df_pts[i, y])
我想遍历 df_pts 中的行,并根据与 2d 标准差为的距离的高斯分布从 df_map 中选择一行df_pts[i, accuracy]
。换句话说,在每个df_map 中,我想根据均值和 2d sdi = 1:10
的正态分布从 df_map 中抽取一个样本。df_pts[i, x]^2 + df_pts[i, y]^2
df_pts[i, accuracy]
我将不胜感激任何有关有效和复杂的方法的建议。我对 R 比较陌生,并且来自 C 背景,我编写这样的任务的方式涉及太多的基本循环和使用基本操作的每一步计算,这使得代码非常慢。
如果问题太琐碎或结构不合理,我会提前道歉。
解决方案
易于使用的数据:
df_map <- data.frame(x = c(6,-4,-2,13,1,5,10,14,8,-8),
y= c(0,2,15,6,-3,16,5,-7,14,-4),
z= c(103,102,112,105,117,105,103,119,107,100))
df_pts <- data.frame(x = c(5,3,-18,11,-3,-9,5,12,-16,0),
y= c(18,2,14,13,-10,-11,1,-19,20,-8),
accuracy = c(-0.8464018, 0.5695678,-0.4711559,-0.7306417, 2.1887011, 2.1523923,-0.9612284,-0.4750582,-1.4554292,3.4028887))
我认为您正在寻找的是最近邻搜索。过去我为此苦苦挣扎,但这是我想出的代码:
library("FNN")
findNeighbour <- function(index){
first = df_pts[index,1:2]
hit = get.knnx(df_map[c("x","y")], first, k =1 )
hit_index = hit[[1]]
hit_result = df_map[hit_index,]
result = append(df_pts[index,], hit_result)
}
t <- do.call(rbind, lapply(1:nrow(df_map),findNeighbour))
这导致:
x y accuracy x.1 y.1 z
1 5 18 -0.8464018 5 16 105
2 3 2 0.5695678 6 0 103
3 -18 14 -0.4711559 -2 15 112
4 11 13 -0.7306417 8 14 107
5 -3 -10 2.1887011 -8 -4 100
6 -9 -11 2.1523923 -8 -4 100
7 5 1 -0.9612284 6 0 103
8 12 -19 -0.4750582 14 -7 119
9 -16 20 -1.4554292 -2 15 112
10 0 -8 3.4028887 1 -3 117
正如您所看到的,在此示例中,某些数据被多次匹配,因此根据您的目标,您可能希望将这些数据丢弃或进行双向搜索。
我希望这就是你要找的
推荐阅读
- javascript - 如何在js中一次添加所有事件监听器?
- python - PyTorch ValueError:维度“str”太多
- git - 在 git 存储库中维护 LibreOffice Draw 文档
- c++ - 按 key 的绝对值对 std::map 排序
- python - 如何在 Scrapy 中围绕 url 列表构建蜘蛛?
- r - 在 R 中使用 ggplot 绘制数据的一部分
- sql - Oracle 根据父/子分区获取最新值
- python - 如何将系列嵌入数据框中的特定行?
- reactjs - React JS NAN '新 URLSearchParams(this.props.location.search)'
- html - 相同的图像,相同的容器,但大小不同