R 基于列值在表中查找匹配值

R 基于列值在表中查找匹配值,r,R,我有一张桌子,看起来像: [1,] 1 6 8 0.09457250 0.09457250 0.09457450 0.09457250 0.094572200 0.094572200 [2,] 1 3 7 0.04620798 0.04620798 0.04620998 0.04620798 0.046207681 0.046207681 [3,] 2 5 4 0.00160710 0.00160710 0.00160710 0.00160710 0.001607281 0.001607281

我有一张桌子,看起来像:

[1,] 1 6 8 0.09457250 0.09457250 0.09457450 0.09457250 0.094572200 0.094572200
[2,] 1 3 7 0.04620798 0.04620798 0.04620998 0.04620798 0.046207681 0.046207681
[3,] 2 5 4 0.00160710 0.00160710 0.00160710 0.00160710 0.001607281 0.001607281
[4,] 6 6 8 0.09457250 0.09457250 0.09457450 0.09457250 0.094572200 0.094572200
[5,] 7 3 7 0.04620798 0.04620798 0.04620998 0.04620798 0.046207681 0.046207681
[6,] 12 5 4 0.00160710 0.00160710 0.00160710 0.00160710 0.001607281 0.001607281

[1,] 0.0945722 0.0945722 0.0945722 0.5171163 0.5171163 0.5171168 0.5171168
[2,] 0.9078313 0.5171163 0.5171163 0.5171163 0.4969045 0.4969050 0.4969050
[3,] 0.0016076 0.0016076 0.0016076 0.0016076 0.0016078 0.0016083 0.0016083
[4,] 0.0945722 0.0945722 0.0945722 0.5171163 0.5171163 0.5171168 0.5171168
[5,] 0.9078313 0.5171163 0.5171163 0.5171163 0.4969045 0.4969050 0.4969050
[6,] 0.0016076 0.0016076 0.0016076 0.0016076 0.0016078 0.0016083 0.0016083

[1,] 0.5171168 1.7740327 1.7740327 1.3879578 1.0062008 1.0062010 1.0062010
[2,] 0.4969050 0.4969109 0.4969109 0.4969050 0.4969050 0.4969050 1.0062010
[3,] 0.0016083 0.0016142 0.0016142 0.0016083 0.0016083 0.0016083 0.0016073
[4,] 0.5171168 1.7740327 1.7740327 1.3879578 1.0062008 1.0062010 1.0062010
[5,] 0.4969050 0.4969109 0.4969109 0.4969050 0.4969050 0.4969050 1.0062010
[6,] 0.0016083 0.0016142 0.0016142 0.0016083 0.0016083 0.0016083 0.0016073
出于计算目的,可以忽略前3列。但是第一列存储了一个重要的信息。如果该值为12,则表示从第12列开始(如果未计算前3列),或从第15列开始(如果考虑到前3列),并在该行(本例中为第6行)的右侧和左侧(第6行,第12列)查看10e-5(加减)值范围内的值的延伸。把结果记下来是很重要的

column1 column2 column3 StartofStretch End of Stretch
12       5       4       1               20
其中第1、2、3列为原始的前3列。重要的是,它对序列中稍后/较早出现的数字(在1e5公差范围内)具有鲁棒性 为了解决这个问题,我以前试过

f <- function(x){
  v <- x[4:length(x)]
  m <- which(v == v[x[1]] )
  return(c(start=min(m),stop=max(m)))
}
q <-cbind(p[,1:3],t(apply(p,1,f)))
这与第3行(举例说明)不同,第7列和第8列之间的差异是-6乘以10的负7的幂,应该在这个范围内……我误解了什么?
同样在第1行中,如果灵敏度为小数点后4位,则第3列和第4列(或者,如果输出中没有计算前三列,则第1列和第2列)应相同?

这里有一个快速而肮脏的选项(
mat
保留您的表格):


有人能指出什么不清楚吗?问题是什么?你想干什么?重要的注意事项是什么?你试过什么?然后,回答一些问题会更容易。这实际上是关于第12栏中的模式匹配(在本例中),请参阅更新的问题,阐明我的尝试。此外,我怀疑这会增加帮助您发现您已收到您之前所有20个问题的答案,但未接受其中任何一个问题的意愿。读,读,并据此行动。这是伟大的@lukeA。我可以问一下它是在两个方向上检测还是仅从第一列所指示的卷向前检测吗?#@user3069326两者都检测。ps:你可能想使用
(res)你能告诉我在你的oce中在哪里添加这个吗..或者简单地更新一下..我会非常感激的Hey@lukeA如果我尝试你的代码,我会在p[row,-(1:3)]:下标越界..是否在某个地方定义了矩阵允许的cilumn数或行数?@user3069326否没有定义。它适用于示例数据。
    t                                                                  
[1,] 1 23 20 0.008352330 0.008352572 0.008352330 0.008352330 0.008351730
[2,] 1 17 28 0.020770380 0.020770622 0.020770380 0.020770380 0.020769780
[3,] 1  4 12 0.006003570 0.006003812 0.006003570 0.006003570 0.006002970
[4,] 1 11 13 0.005008098 0.005008340 0.005008518 0.005008518 0.005007918
[5,] 1  3 10 0.006530800 0.006531042 0.006530800 0.006530800 0.006531300
[6,] 1 19 22 0.003711100 0.003711342 0.003711100 0.003711100 0.00371160

the output of lukeA's script  
         t       lower upper    expedected lower   expectupper
    [1,] 1 23 20     1     1         1                5
    [2,] 1 17 28     1     5         1                4
    [3,] 1  4 12     1     4         1                5
    [4,] 1 11 13     1     2          1               5
    [5,] 1  3 10     1     5          1               5
    [6,] 1 19 22     1     4         1               5
f <- function(row, tol=4) {
  a <- unname(signif(mat[row, -(1:3)], tol))
  i <- mat[row, 1]
  l <- which(!a == a[i])
  upper <- l[which(l > i)[1]] - 1
  lower <- tail(l[which(l < i)], 1) + 1
  if (is.na(upper)) upper <- length(a)
  if (length(lower) == 0) lower <- 1
  return(c(lower=lower, upper=upper))
}
(res <- t(mapply(f, 1:nrow(mat))))
#      lower upper
# [1,]     1     9
# [2,]     1     6
# [3,]     1     6
# [4,]     1     9
# [5,]     7     7
# [6,]     7    14
cbind(mat[, 1:3], res)