如果单独列中的值满足某些参数,则从列返回值

时间:2013-05-26 07:13:54

标签: r statistics

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

所以例如,
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"]中符合这些参数的所有值执行此操作。优选地,具有打印输出,其清楚地指示多个配对值(即相应的坐标)。

非常感谢帮助启动这一点,显然解决方案也很有用。我知道如何过滤和制作由某些值组成的数据框的子集,但我不知道如何在这个问题的不同部分拉对象。

1 个答案:

答案 0 :(得分: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(与上面的最后一行一样)。如果你想澄清这一点,我会相应地更新答案。