0

我希望能够搜索或过滤一列,如果它满足某些参数,则返回另一列中的值(但在不同的点)。

例如,
L <- matrix(rnorm(500, mean=50, sd=4), nrow=100, ncol=5, byrow=FALSE)
L <-as.data.frame(L)
colnames(L)<-c("1","2","3","4","5")

如果L[,"1"] >= 58我想打印L[,"4"]低 5 行的值。

因此,如果L[1,1]值为 60,我想要 的值并对满足这些参数L[6,4]的所有值执行此操作。L[,"1"]最好带有打印输出,清楚地指示多个配对值(即相应的坐标)。

帮助开始这将不胜感激,显然解决方案也很有帮助。我知道如何过滤和制作包含某些值的数据框的子集,但我不知道如何在这个问题中的不同部分提取对象。

4

1 回答 1

1

好吧,至于帮助入门,该which功能会有所帮助。它返回满足特定条件的索引 - 因此要查看列“1”大于 58 的所有行,您可以使用:

matched.indices <- which(L[,"1"] > 58)

然后要找到所有低 5 行的索引,我们可以简单地添加 5:

shifted.indices <- matched.indices + 5

从这里,您可以根据需要打印出成对的值和坐标。一种方法如下:

len <- length(matched.indices)    
cat(paste(rep("[",len), matched.indices, rep(",1],", len),     # 1st coordinate
        rep("[",len), shifted.indices, rep(",4] = ", len),     # 2nd coordinate
        L[matched.indices, "1"],                               # 1st value
        rep(",", len),
        L[shifted.indices, "4"],                               # 2nd value
        sep=""),sep="\n")

输出将如下所示:

[4,1],[9,4] = 58.9223792285318,48.5241852967192
[70,1],[75,4] = 58.5015984791419,55.3071097158975
[76,1],[81,4] = 61.7996739529131,51.6725968541657
[85,1],[90,4] = 58.0881601753751,40.2410431328713
[92,1],[97,4] = 58.1622310810397,50.6118549434608
[96,1],[101,4] = 58.4433975051732,NA

正如我所说,这只是一个开始。具体来说,您没有提到如何处理最后 5 行;我的解决方案只会为这些值打印 NA(与上面的最后一行一样)。如果您想澄清这一点,我将相应地更新答案。

于 2013-05-26T12:06:52.273 回答