找到比较R中数据集的2个部分的范围之间的值

时间:2013-08-30 11:58:56

标签: r range

过去2天我一直坚持这个问题:(。 这就是我的数据集的样子。

        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中的任何值的+/- 0.003范围内对子集V6 = 1的值进行异常处理= 2。

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

重要提示: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")
}
}

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

玩得开心

2 个答案:

答案 0 :(得分: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_1V2_2的值。

答案 1 :(得分: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的新生,但也许是......像上面的代码一样有效吗?