私は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
私は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
私はあなたのコメントを理解する方法として、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
どういう意味ですか?特定の数字に一致する行でdfを処理するか?意図した成果とは何ですか、これまでに何を試しましたか? – nya
あなたが望むものは明確ではありません。 – akrun
それを忘れて、私は事件を単純化します。私は持っていないFの値を取得したいので、前の1つの従属変数でチェックしますIf Ifそれも私はもう一度一歩元に戻ってはいけません。私はA.に値を持っています。各ステップにはいくつかの倍率があります。どのようにしてAからFの値を得ることができますか(F-E-D-C-B-A) –