楼主: peijianshi
1085 2

[问答] R中关于小区的组合筛选问题(高难度问题) [推广有奖]

  • 0关注
  • 16粉丝

已卖:352份资源

副教授

80%

还不是VIP/贵宾

-

威望
0
论坛币
638 个
通用积分
2.3662
学术水平
12 点
热心指数
12 点
信用等级
5 点
经验
15373 点
帖子
636
精华
0
在线时间
568 小时
注册时间
2010-3-11
最后登录
2022-9-8

楼主
peijianshi 发表于 2016-4-2 21:26:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在有125个小区(15X15个相等的小正方形)组成一个大正方形样地,现在想从这125个小区中选择一定数量的相邻小正方形(这些相邻小正方形组成的整体图形可以是各种形状,不一定要求还是正方形),假设需要的数量为seq(10,  210, by=15)这样一个梯度,即从125中抽10个、25个、40个、...、210个小正方形,每个数量梯度反复抽取,而这些小正方形都是相互连通的。每个小正方形内都有一定数量的植物,即每个小正方形都有一个数值(如:一个小正方形内有125株黑麦草)。举例,现在需要将10个小正方形内的数值加和成一个,即这10个小正方形构成一个样本,在125中再抽10个,再加和这些数值为另外一个样本,注意每次抽样这10个小正方形必须要求相连。对于后边的25个也是如此,每次抽取的25个算成一个(加和小正方形的数值)样本。在R中,如何才能做到?

谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:高难度 正方形 一个样 黑麦草 如何 黑麦草 正方形 样本 植物

回帖推荐

万人往LVR 发表于2楼  查看完整内容

光是抽取某一组合的概率就很难算,写了一个从抽取一个点,通过找相邻发展成10个点的代码,方法比较笨,而且数学上不一定对。论坛里美元符号会转化为格式,看懂即可。
R万岁!

沙发
万人往LVR 在职认证  发表于 2016-4-3 22:33:04
光是抽取某一组合的概率就很难算,写了一个从抽取一个点,通过找相邻发展成10个点的代码,方法比较笨,而且数学上不一定对。论坛里美元符号会转化为格式,看懂即可。
  1. set.seed(1234)
  2. score <- matrix(rnorm(225,mean=0.7,sd=0.2),ncol=15)
  3. len <- 10
  4. library(dplyr)
  5. find_close_points <- function(exist_points){
  6.     col <- floor(exist_points/15)+ifelse(exist_points%%15==0,0,1)
  7.     row <- ifelse(exist_points%%15==0,15,exist_points%%15) ##向量位置变为矩阵位置
  8.     tmp_close_points_col <- c(col+1,col-1,col,col)
  9.     tmp_close_points_row <- c(row,row,row+1,row-1) ##取相邻的点
  10.     tmp_close_pos <- data.frame(row=tmp_close_points_row,
  11.                                 col=tmp_close_points_col) %>%
  12.                      .[.$row>0&.$row<=15&.$col>0&.$col<=15,] %>% ##去掉过界的
  13.                      .[paste(.$row,.$col) %in% paste(row,col)==F,] ##去掉已存在的
  14.     exist_vec <- ifelse(tmp_close_pos$row%%15==0,15,tmp_close_pos$row%%15)+
  15.                  (tmp_close_pos$col-1)*15 ##矩阵位置还原为向量位置
  16.     return(exist_vec)
  17. }

  18. exist_points <- c() ##已抽取点
  19. close_points <- 1:225 ##相邻点

  20. for(i in 1:len){
  21.   set.seed(12345)
  22.   temp_point <- sample(close_points,1) ##在相邻可抽取点中抽一个
  23.   exist_points <- c(exist_points,temp_point) ##补进已抽取点
  24.   close_points <- find_close_points(exist_points) ##根据已抽取点更新相邻点
  25. }
  26. results <- sum(score[exist_points]) ##求和
  27. pos <- data.frame(col=floor(exist_points/15)+ifelse(exist_points%%15==0,0,1),
  28.                   row=ifelse(exist_points%%15==0,15,exist_points%%15)) ##抽取点的矩阵位置
复制代码

藤椅
peijianshi 发表于 2016-4-5 17:20:46
你太牛了!

谢谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-12 22:58