0

在过去的两天里,我一直被这个问题困扰:(。这就是我的数据集的样子。

        V1    V2 V3   V4     V5 V6
1 1.347256 1.347  1 3300  -3399  1
2 1.353107 1.353  2 4021  -5155  1
3 1.356644 1.357  3 4480  -6859  1
4 1.362766 1.363  2 6471 -11369  1
5 1.368889 1.369  4 5102  -6463  1
6 1.381361 1.381  2 4346  -2940  1



 1.347256 1.347  1 3301  -3395  2
 1.354150 1.354  1 3579  -5156  2
 1.356644 1.357  1 4478  -6863  2
 1.362766 1.363  1 6465 -11373  2
 1.368889 1.368  1 5103  -6463  2
 1.405488 1.405  1 1827  -3415  2

我想比较 V6 为 1 和 V6 为 2 时 V2 中的值。并且需要精确子集 V6=1 的值在子集 V6=2 中任何值的 +/- 0.003 范围内。

例如:应该考虑 V6==2 数据的前 5 个,并且我想以某种方式检索这些行中的信息。

重要提示:2 个子集的长度不同!

这是我的策略。我首先对数据库进行子集化。

ele1 <- subset(data, V6==1)
clus1 <- subset(ele1, V3==1)
ele2 <-subset(data, V6==2) 

然后我认为最好的策略可能是获得 2 个子集之间所有可能的差异。然后选择那些将导致范围 +/- 0.003 的差异。

在我做过的所有试验中,这是最好的一个:

for (i in 1:clus1$V2)
     for (j in 1:ele2$V2)
{
 diff<-(i-j)
if (diff>-0.003)& (diff<0.003)
{
res<-("number of row with the wanted walues")
}
}

好吧,我知道这可能是完全错误的(至少它可能会让你们中的一些人发笑)。我刚刚开始尝试编程:)。感谢您提供任何类型的输入!!

玩得开心

4

2 回答 2

0

部分回答您的第一个问题。

V2_1 <- data$V2[data$V6==1]
V2_2 <- data$V2[data$V6==2]

然后用这两个向量的值来做你的事情。

要更进一步,您必须编辑您的问题以清楚起见。我怀疑你可以<0.003通过明智地使用来拒绝价值观,适当地all.equal设置tolerance论点,或者类似地使用cgwtools::approxeq。(免责声明 - 我写了后者)

嗯...因为您想将一个向量的每个元素与另一个向量的每个元素进行比较,可能是这样的:

cmp <- abs(outer(V2_1, V2_2,"-")) 

这将为您提供所有可能差异的矩阵。找到匹配的索引:

cmp.match <- which (cmp < 0.003, arr.ind=TRUE)

并拒绝V2_1, 或V2_2与这些索引匹配的值。

于 2013-08-30T13:01:36.560 回答
0
for (i in 1:nrow(ele1)) # you have to specify the number of loops
 {
  for (j in 1:nrow(ele2))
   {
    diff <- ele1[i,2] - ele2[j,2] # as V2 is the second column
    if ((diff > -0.003) & (diff < 0.003))
     {
      print(i,j)
     }
   }
 }

我也是R的大一新生,但也许……。像上面的代码一样有效吗?

于 2013-08-30T13:13:50.310 回答