我正在寻找找到行子集的可能性(一个子集应包含 6 行),其中多列的值均值最相似。因此,我希望 R 搜索我的 data.frame 并创建每行 6 行的子集,以便最终这些子集彼此最相似。相似性可以用欧几里德距离来衡量(正如@David Robinson 所指出的那样)。
我的数据如下所示:
TID Cue1 Cue2 Cue3
1 2.06 1.90 3.82
2 5.18 4.13 5.10
3 5.09 2.85 2.80
4 1.93 4.14 4.75
... ... ... ...
我现在想知道 R 中是否有一种方法,我发现以下内容:
- 给我例如 4 个子集,每个子集包含 6 行,其中 4 个子集在Cue1、Cue2 和 Cue3均值中具有最大可能的相似性(SD 并不重要),而每个子集都包含唯一的行(子集之间没有重复的行)。
一个例子是(与我的例子中的数据不匹配):
-子集 1 包含TID 1、TID 6、TID 14、TID 28、TID 39、TID 50,并且该子集具有提示均值(Cue1 = 3,2;Cue2 = 2,5;Cue3 = 4)
-子集 2 包含TID 3、TID 12、TID 20、TID 40、TID 54、TID 59,并且该子集具有提示均值(Cue1 = 3,3;Cue2 = 2,6;Cue3 = 4,1)。
所以这两个子集在提示手段上非常(最)相似。R 现在应该将构成子集的行号(或 TID 值)命名为我。
有没有可能在 R 中做到这一点?
这是我的数据的可重现示例:
mysamp <- function(n, m, s, lwr, upr, nnorm) {
set.seed(1)
samp <- rnorm(nnorm, m, s)
samp <- samp[samp >= lwr & samp <= upr]
if (length(samp) >= n) {
return(sample(samp, n))
}
}
Cue1 <- mysamp(n=60, m=3, s=1.5, lwr=1, upr=6, nnorm=1000)
Cue2 <- mysamp(n=60, m=3, s=2.5, lwr=1, upr=6, nnorm=1000)
Cue3 <- mysamp(n=60, m=4, s=1.5, lwr=1, upr=6, nnorm=1000)
df <- data.frame(TID= 1:60, Cue1= Cue1, Cue2= Cue2, Cue3= Cue3)