过去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")
}
}
好的,我知道这可能是完全错误的(至少它可能让你们中的一些人笑)。 我刚刚开始尝试编程:)。 谢谢你的任何类型的输入!!
玩得开心
答案 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_1
或V2_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的新生,但也许是......像上面的代码一样有效吗?