【问题标题】:sample column without duplicates没有重复的样本列
【发布时间】:2014-03-12 09:26:27
【问题描述】:

我目前正在编写一个自定义函数来实现这一点,但我想知道 R 中是否有一个简单的内置函数可以实现相同的目标。

我有如下数据:

stringVariable1     stringVariable2

string1             a
string1             b
string1             d
string2             e
string2             a
string3             b

我想对 stringVariable2 中的数据进行洗牌,但我不希望 1 中的不同 stringVariables 出现重复。

所以这是不可接受的(因为 'b' 相对于 string1 是重复的):

stringVariable1     stringVariable2

string1             b
string1             b
string1             d
string2             a
string2             e
string3             d

但这会:

stringVariable1     stringVariable2

string1             b
string1             e
string1             d
string2             a
string2             e
string3             d

所以基本上我试图随机化 stringVariable2,而不是替换不同的 stringVariable1。创建自定义函数是唯一的方法吗?

谢谢!

【问题讨论】:

  • 取决于性能...例如,您可以洗牌 var2,检查重复项,并在需要时重新洗牌
  • 我考虑过,但是数据有超过100万行有很多重复的字符串变量,所以至少得到一个重复的概率超过99%
  • (我想运行大约 10000 次)

标签: r sampling random-sample


【解决方案1】:

stringVariable2 的值是否在 stringVariable1 的组中重复?如果不是,则可以使用以下内容执行分组排列(d 是包含数据的数据框的名称):

d$perm1<-as.vector(unlist(tapply(d$stringVariable2, d$stringVariable1, sample)))

这 (tapply()) 对每组 stringVariable1 中的 stringVariable2 应用不替换的采样(使用 sample())。最后,使用unlist()as.vector() 将结果列表转换为向量。最后一个函数只是去掉向量内的观察名称。然后将置换后的值存储在原始数据框的 perm1 列中。

【讨论】:

  • 啊,我刚刚注意到这并不完全符合我的要求。例如,使用这种方法,在采样方法之后,'e' 永远不会与 string1 相关联 - 我希望变量 2 基本上是随机的,但在每个 stringvariable1 类别中都不会出现重复项。您介意快速浏览一下吗?
  • 随机化通常遵循数据集或实验设置的某些特征。我认为 stringVariable1 是某种阻塞,但我想不是。至少现在,我无法找到一种快速便捷的替代方案,通常可以完全满足您的要求。您是否检查过 permute 包中可用的工具(尤其是小插图)?它还允许您指定可以满足您需求的复杂随机化方案。
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2015-07-18
  • 2011-10-09
  • 1970-01-01
相关资源
最近更新 更多