【发布时间】:2014-11-08 09:57:31
【问题描述】:
我尝试在 R 中获取一些值。我不是一个有经验的编程人员。
我有一个以特定方式搜索矩阵的功能。这是矩阵:
k2=c(3,6,4,NA,NA,NA,NA)
k3=c(2,7,5,NA,NA,NA,NA)
k4=c(7,9,5,2,1,8,12)
df2=data.frame(k2,k3,k4)
m2=as.matrix(df2)
m2
k2 k3 k4
[1,] 3 2 7
[2,] 6 7 9
[3,] 4 5 5
[4,] NA NA 2
[5,] NA NA 1
[6,] NA NA 8
[7,] NA NA 12
主要思想是在 k4 行中找一个值。如果该行的值不同, 该函数应检查同一行中的值,然后转到这些行 找到价值。
因此,如果 [1,k4] 中的值小于 val,则应将同一行 ([1,k3]) 中的第二列值作为行号,并检查第三列中的值该行中的列 [行的值,3]。如果值更大,它应该做和以前一样的事情,但使用 [1,k2]。如果该值再次不是所需的值,则应再次检查并为下一行重复相同的过程,直到获得匹配。
例子:
因此,如果我需要 val=5 那么它应该检查它是否与 [1,k4] 相同的值是 7 而不是,然后它应该去第三低检查 [3,k4] 和你可以看到是一样的,也就是说要打印5。如果我需要我需要的值是12,那么逻辑是否应该是这样的:val和7不一样,所以转到第三行,检查9,哦,它的值不一样,我会去第7行,在那里,它的值相同,然后我会打印......
到目前为止我的代码/我的进度
我知道我必须在每列时间搜索第三个,也就是说,从第一个开始
for (i in df2[1,3])
然后检查该列中的每个值是否不等于val:
if (!i == val)
对我来说,棘手的部分来了。我知道我必须检查它是小还是大,这意味着它应该是这样的
if (!i == val)
#then check if its less, if yes, go that row
#if it greater then go then go that row
# go to that row and check the same thing there
我不知道该怎么做,所以它会为每一行重复自己,直到找到 val 中的值。我知道我可以将较小值的行指定为 n-2,将较大值的行指定为 n-1,但我在这里努力使其工作。正如我所说,我在编程方面的经验很少。
非常感谢!
我真的需要这方面的帮助。
【问题讨论】:
-
我不能效仿你的榜样。使用
val = 5进入第一行,然后进入第三行,成功!第三行的值为 5。然后使用val = 12转到第一行,然后转到第三行并看到值 9。为什么不像第一次那样看到 5? -
另外,在
for循环的开头,您有for (i in df2[1, 3])。但是df2[1, 3]是一个值,它是 7。所以你的 for 循环只需要一个值,i = 7。它是否正确?如果没有,您将尝试寻找的所有价值观是什么? -
@Gregor 所以如果 val=12 1. 转到第一行并检查该行中最右边的值 2. 该值是 7 并且不一样,然后检查我应该在哪一行go 3.检查我应该去哪一行,如果我必须检查值是大于还是小于7 4.12大于7,所以我去第二行5.检查9,不是同12,再次检查是大还是小 6. 大于9,那么我应该去第7行 7. 值和12 一样 你看不到它,因为它像一个“捷径” 8. 打印具有值的整行