我希望能够搜索或过滤列,如果它符合某些参数,则返回另一列中的值(但在不同的位置)。
所以例如,
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"]
中符合这些参数的所有值执行此操作。优选地,具有打印输出,其清楚地指示多个配对值(即相应的坐标)。
非常感谢帮助启动这一点,显然解决方案也很有用。我知道如何过滤和制作由某些值组成的数据框的子集,但我不知道如何在这个问题的不同部分拉对象。
答案 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(与上面的最后一行一样)。如果你想澄清这一点,我会相应地更新答案。