如何在R中构造site、season等因子完全交叉的模拟数据集
R构造完全交叉数据集的调整方案
原有代码问题
- 你现有的代码仅生成20行数据,
rep的each参数设置错误,无法覆盖5个站点×2个季节×2年×2个物种的所有40种组合,四个分组因子没有实现完全交叉。 - 手动设置
rep的重复次数容易出错,更推荐用expand.grid()直接生成所有因子的笛卡尔积。
最优实现代码
# 自动生成四个因子的完全交叉组合 df <- expand.grid( site = c("1", "2", "3", "4", "5"), season = c("dry", "wet"), year = c(2019, 2020), species_name = c("Sailfin molly", "Hardhead silverside") ) # 生成捕获数量列,抽样长度自动匹配数据集行数 df$num <- sample(x = 0:15, size = nrow(df), replace = TRUE)
手动调整rep参数的实现方案
如果你不想用expand.grid(),也可以手动修正rep的重复规则,代码如下:
df <- data.frame( site = rep(c("1", "2", "3", "4", "5"), times = 8), season = rep(c("dry", "wet"), each = 5, times = 4), year = rep(c(2019, 2020), each = 10, times = 2), species_name = rep(c("Sailfin molly", "Hardhead silverside"), each = 20), num = sample(x = 0:15, size = 40, replace = TRUE) )
两种方案生成的数据集都满足40行×5列的要求,所有分组因子完全交叉。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

