【问题标题】:R : randomly divide 10 data values into a group of 5 and a group of 5R:随机将10个数据值分成5个一组和5个一组
【发布时间】:2023-11-18 17:28:01
【问题描述】:

我想找到将 10 个数据值分成 2 组,每组 5 个的所有可能性 如果我是对的,有 252 种可能性 选择(10,5) 252

我怎样才能用 R 做到这一点?

谢谢!

【问题讨论】:

  • a <- 0:9; (b <- combn(a, 5)); (c <- apply(b, 2, function(x) a[!a %in% x]))?
  • 是的,我在 R 中看到了 combn 函数,但是如何创建一个长度为 10 的向量,其中每个值只出现一次?
  • 嗯,我想我不明白。请为您的 10 个数据值 和您的 长度为 10 的向量提供一个示例,其中每个值仅出现一次
  • 这是我拥有的向量:

标签: r list random combinations


【解决方案1】:

这是一种可能性:

a <- letters[1:10] 
split1 <- combn(a, 5); 
split2 <- apply(b, 2, function(x) a[!a %in% x])

随机选择一个:

set.seed(1)
rnd <- sample(1:ncol(split1), size=1)
split1[, rnd]; split2[, rnd]
# [1] "a" "c" "d" "g" "i"
# [1] "b" "e" "f" "h" "j"

【讨论】:

  • 谢谢,但是我怎样才能用你的方法创建所有可能的 10 个值的向量(如果我是对的,252 个)?
  • @user1845261 combn 返回N choose M所有组合。您通过选择每个 5 元素向量中 notletters[1:10] 的剩余元素来完成每个“10 向量”。
  • 是的,谢谢我做了:for(i in 1:ncol(split1)){tmp1
【解决方案2】:

所以我将详细解释我必须做什么: 我有两组数据:

cellular_wt = c(1.1656,0.9577,1.3655,0.9016,0.9336)
cellular_mutant = c(2.8896,5.7018,3.595,1.6998,1.8893)

secreted_wt = c(7.8491,6.1546,5.1972,6.1607,5.928)
secreted_mutant = c(4.6801,3.2418,3.6651,3.0678,2.3221)

mean_cellular_wt <- mean(cellular_wt)
mean_cellular_mutant <- mean(cellular_mutant)
mean_secreted_wt <- mean(secreted_wt)
mean_secreted_mutant <- mean(secreted_mutant)

mean_secreted_wt/mean_cellular_wt = 5.877085
mean_secreted_mutant/mean_cellular_mutant = 1.076156

mean_ratio <- (mean_secreted_wt/mean_cellular_wt)/(mean_secreted_mutant/mean_cellular_mutant) = 5.46

我想对这些数据进行随机测试以测试平均比率的显着性

为此,我想将这 10 个值(cellular_wt +cellular_mutant 和 secreted_wt + secreted_mutant)随机分成 2 组,每组 5 个(作为初始数据集),并计算每次的平均比率。 通过这种方式,我可以通过将其与仅由于随机分配而可能看到的 252 个差异进行比较来查看观察到的 5.46 差异是否异常大。你明白吗?

【讨论】: