2016-08-10 13 views
-3

私は1つのデータフレームを持っているので、A-B-C-D-E-Fのシーケンスに従ってAからFへ行きたい。 Rを使用して進める方法に続くA-B-C-D-E-Fの配列。 R

> m 
V1 V2 V3 
1 A B 0.1 
2 B C 0.2 
3 C D 0.3 
4 D E 0.2 
5 E F 0.5 
+2

どういう意味ですか?特定の数字に一致する行でdfを処理するか?意図した成果とは何ですか、これまでに何を試しましたか? – nya

+0

あなたが望むものは明確ではありません。 – akrun

+0

それを忘れて、私は事件を単純化します。私は持っていないFの値を取得したいので、前の1つの従属変数でチェックしますIf Ifそれも私はもう一度一歩元に戻ってはいけません。私はA.に値を持っています。各ステップにはいくつかの倍率があります。どのようにしてAからFの値を得ることができますか(F-E-D-C-B-A) –

答えて

2

私はあなたのコメントを理解する方法として、AとFの関係は、行間のm $ V3の積です。

af <- function(from, to){ 
    x <- which(m$V1 == from) 
    y <- which(m$V2 == to) 
    return(prod(m$V3[x:y])) 
} 

af("A", "F") 
[1] 6e-04 

次に、F = A * 0.0006。

テーブル内の任意のシーケンスおよび任意の行順序に一般化するために、まずシーケンスを定義します。

この関数では、V1とV2の両方の列に指定に一致するシーケンス条件が含まれているように、それぞれの行を選択します。元の行列を使用し

af2 <- function(from, to){ 
    cond <- sq[which(sq == from):which(sq == to)] 
    x <- m$V1 %in% cond & m$V2 %in% cond 
    return(prod(m$V3[x])) 
} 

テスト

、両方の機能は、同じ結果をもたらします。

af("B","E") 
[1] 0.012 
af2("B","E") 
[1] 0.012 

行順をランダム化すると、2番目の関数だけが正しい結果を返します。

set.seed(123456) 
m <- m[sample(1:5),] 
m 
    V1 V2 V3 
4 D E 0.2 
5 E F 0.5 
2 B C 0.2 
1 A B 0.1 
3 C D 0.3 

af("B","E") 
[1] 0.02 
af2("B","E") 
[1] 0.012 
+0

または直接A * prod(m $ V3)を入力してください。 – Robert

+0

@Robert True df全体を求めます。 – nya

+0

@nyaあなたは私の質問を持っています。私は申し訳ありませんが、私はこれに複雑さを加えたいと思います。このA-Fが連続していないとどうなりますか?例2行目はC-D、3行目はB-Cです。この場合、この(prod(m $ V3 [x:y]))は動作しません。リット? –

関連する問題