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

ここから、必要に応じて値と座標のペアを印刷できます。1 つの方法は次のようになります。

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 に答える