You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言循环抽样计算比例并保存结果的技术问询

解决R语言循环抽样并保存比例的问题

首先修正你原代码中的基础问题:当前代码执行nrow(data)时data还未被读取,需先完成数据导入。以下是针对循环抽样和比例保存需求的完整解决方案,包含基础循环法和更高效的向量式实现:

1. 修正数据导入与预处理

先完成数据的正确导入和预处理,同时优化代码效率:

library(data.table)

# 下载并读取压缩数据(data.table的fread支持直接读取.gz文件)
url = "http://data.insideairbnb.com/brazil/rj/rio-de-janeiro/2022-09-21/data/listings.csv.gz"
tmp = tempfile()
download.file(url, tmp)
dt = fread(tmp)

# 计算总行数
total_rows <- nrow(dt)
cat("数据总行数:", total_rows, "\n")

# 创建整租房源二元标识(1=整租,0=其他)
dt[, room_type_binary := ifelse(room_type == "Entire home/apt", 1, 0)]

# 计算完整数据集的整租房源比例(用mean直接计算1的占比,比table+prop.table更简洁)
full_prop <- mean(dt$room_type_binary)
cat("完整数据集整租房源比例:", full_prop, "\n")

2. 基础循环实现10000次抽样

先初始化一个固定长度的空向量存储结果(提前分配内存比动态追加效率高),再用for循环完成重复抽样:

# 初始化存储比例的向量,提前分配10000个元素的内存
sample_props <- numeric(10000)

# 循环执行10000次抽样与比例计算
for(i in 1:10000){
  # 随机抽取100行样本(data.table用.N指代当前表总行数)
  sample_dt <- dt[sample(.N, 100)]
  # 计算样本中整租房源的比例并存入向量
  sample_props[i] <- mean(sample_dt$room_type_binary)
}

# 查看前10次抽样的比例结果
head(sample_props, 10)

3. 更高效的replicate函数实现

R中推荐用replicate替代重复循环,代码更简洁且执行效率更高:

# 用replicate直接执行10000次抽样计算
sample_props_rep <- replicate(10000, {
  mean(dt[sample(.N, 100)]$room_type_binary)
})

# 查看结果
head(sample_props_rep, 10)

关键优化点说明

  • 用mean()计算二元变量比例:二元变量的均值直接等于1的占比,比table()+prop.table()的组合更高效
  • data.table的.N语法:直接指代当前数据表的总行数,无需额外调用nrow()
  • 提前分配内存:初始化固定长度的向量,避免循环中用c()动态追加导致的内存频繁扩容问题

内容的提问来源于stack exchange,提问作者Valério Souza Neto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:55:18