【发布时间】:2020-01-05 15:44:25
【问题描述】:
我有一个包含 3 列的数据框:
ObjectID:多边形(或行)的唯一标识符 AvgWTRisk:森林中干扰的概率(0-1),~0.11是最大值 HA:森林中多边形的面积
我想开发一个函数来根据概率值从数据帧中创建一个随机样本。下面是数据结构的一个例子:
数据
OBJECTID AvgWTRisk HA
32697 32697 0.0008456 7.7465000
36480 36480 0.0050852 7.9329797
13805 13805 0.0173463 0.7154995
38796 38796 0.0026580 0.2882192
8494 8494 0.0089310 6.4686595
23609 23609 0.0090647 6.1246000
输入
structure(list(OBJECTID = c(32697L, 36480L, 13805L, 38796L, 8494L,
23609L), AvgWTRisk = c(0.0008456, 0.0050852, 0.0173463, 0.002658,
0.008931, 0.0090647), HA = c(7.7465, 7.9329797, 0.7154995, 0.2882192,
6.4686595, 6.1246)), row.names = c(32697L, 36480L, 13805L, 38796L,
8494L, 23609L), class = "data.frame")
我正在尝试使用 R 中的 sample() 函数来做到这一点。
有什么方法可以将面积的总和用作我的“size =”目标而不是行数,例如:
Landscape_WTDisturbed <- Landscape_WTRisk[sample(1:nrow(Landscape_WTRisk),
size = sum(HA >= 100*0.95 && HA <= 100*1.05),
prob = WTProb, replace = FALSE),]
其中:WTProb 是 AvgWTRisk 的向量,即 'WTProb
上面的示例选择为我提供了一个包含所有列但没有行的数据框。
相对于:
Landscape_WTDisturbed <- Landscape_WTRisk[sample(1:nrow(Landscape_WTRisk),
size = 10,
prob = WTProb, replace = FALSE),]
这适用于提供 10 行的样本。但是,我无法控制所选区域。
我是否应该尝试使用 while 循环来实现这一点,其中所有行的面积相加是标准,并且可以将一小部分行逐步添加在一起,直到达到目标?
提前谢谢你!
【问题讨论】:
-
根据您的描述,我不明白您要做什么。能否请您澄清一下您想在抽样过程中如何使用“概率值”(
AvgWTRisk?)? -
我正在尝试使用示例函数选择行,其中 AvgWTRisk 是“概率”的值。根据示例函数的要求,我不得不将“AvgWTRisk”转换为向量,因此使用了“WTProb”。但是,出于我的目的,示例函数的问题是无法通过大小标准(即简单的行数)以外的任何方式控制样本数。我尝试使用 sample 函数,但想通过“HA”列中选定样本的总和值来控制样本的大小,而不是行数。
-
我想要的最终输出是一个名为“Landscape_WTDisturbed”的新数据帧,例如,来自完整数据帧的采样行,总面积达到特定数量(5% 以内)。为清楚起见,AvgWTRisk 是自然干扰选择林分的风险,因此我需要将其用作概率。
标签: r random simulation stochastic