我有1个数据帧,我想按照A-B-C-D-E-F的顺序从A到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
答案 0 :(得分: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。
为了概括表中的任何序列和任何行顺序,我们首先定义序列。
sq <- c("A", "B", "C", "D", "E", "F") # or LETTERS[1:6] in this case
在函数中,我们选择各自的行,其中列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
当我们随机化行顺序时,只有第二个函数返回正确的结果。
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