r - R随机选择行,直到满足不同的总和
问题描述
我有兴趣比较不同大小的补丁之间的一些值,但希望随机选择小补丁,直到它们的面积等于随机选择的大补丁的面积。然后,我将比较这个选择的小斑块和单个大斑块之间的独特物种数量。
例如
>df
ID Type Area Species1 Species2
1 Big 50 1 1
2 Big 100 1 0
3 Small 25 0 1
4 Small 50 1 1
5 Small 25 1 1
然后我想随机选择小块,直到它们的面积总和等于随机选择的大块。然后我想比较这个选择和随机选择的大小相等的大块之间的唯一物种数量。例如
如果选择了补丁 1,则随机选择器可以选择补丁 4 或 3+5。然后将在唯一计数补丁 1 = 2、唯一计数补丁 4 = 2 或唯一计数 3+5= 2 之间进行比较。
我希望这是有道理的。如果有任何问题,我很乐意回复/更新。谢谢您的帮助。
解决方案
Bigs<-data.frame(Type="Bigs", Area=rbinom(3,100,rbeta(10,1,1)), Species1=rbinom(3,1,.5), Species2=rbinom(3,1,.5), stringsAsFactors = F);
Smalls<-data.frame(Type="Smalls",Area=rbinom(1000,20,rbeta(1000,1,1)),Species1=rbinom(20,1,.5),Species2=rbinom(20,1,.5),stringsAsFactors = F);
L<-lapply(1:nrow(Bigs),
function(i){
samplesmalls<-c();
x=Bigs$Area[i];
while(x>0&x>min(Smalls$Area)){
drawsmall<-sample((1:nrow(Smalls))[Smalls$Area<=x],1)
samplesmalls<-c(samplesmalls,drawsmall)
x<-x-Smalls$Area[drawsmall]
}
samplesmalls
})
do.call(rbind,lapply(1:length(L),function(i){cbind(toreplace=i,Smalls[L[[i]],])}))
toreplace Type Area Species1 Species2
251 1 Smalls 19 1 1
502 1 Smalls 9 0 1
616 1 Smalls 12 0 1
163 1 Smalls 11 0 1
81 1 Smalls 2 1 0
609 1 Smalls 8 1 0
853 1 Smalls 0 1 0
702 1 Smalls 3 0 1
451 2 Smalls 9 1 1
432 2 Smalls 5 0 0
643 2 Smalls 1 0 1
391 2 Smalls 0 1 1
259 2 Smalls 0 1 1
905 2 Smalls 1 1 0
35 3 Smalls 10 1 0
727 3 Smalls 17 1 1
640 3 Smalls 8 1 0
357 3 Smalls 0 1 0
900 3 Smalls 4 1 0
217 3 Smalls 3 1 0
771 3 Smalls 4 1 1
647 3 Smalls 1 1 1
351 3 Smalls 5 1 1
412 3 Smalls 6 0 0
639 3 Smalls 2 1 1
183 3 Smalls 0 0 1
962 3 Smalls 0 0 1
567 3 Smalls 0 1 1
212 3 Smalls 1 0 0
推荐阅读
- scala - 为什么我在 Intellij、maven 和 scala 测试中遇到 ScalaTest-dispatcher NPE 错误?
- javascript - 在 React Redux Saga 中,API 在循环中被多次调用
- java - 使用 OpenJDK 11 读取带有蓝色棱镜(java 模式)的表时出错
- cocoa - PDFDocument 可能存在的编码问题
- node.js - 使用nodejs和rest api调用和express进行异步处理-序列错误
- python - Ansible 和 Opennebula:这个模块需要 pyone 才能工作
- android - 具有 Android 架构导航的动态功能模块之间的 startActivityForResult()
- python-3.x - 在 Python 中将十六进制数据转换为可读字符串
- wordpress - 将 API 请求重定向到子域 htaccess
- selenium - 当单独运行 appium 测试脚本时,它们运行良好,但是当它们一起运行时,它们会抛出错误