遵循A-B-C-D-E-F的顺序。如何使用R

时间:2016-08-10 11:10:10

标签: r while-loop repeat stat

我有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

1 个答案:

答案 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