0

我有一堆与独特价值相关的手段。唯一值是我在两种不同基材上测试的线条。在 RI 中想要构建一个循环,该循环将采用唯一值并将底物 A 的均值(pheno_output)除以底物 B。并将其吐出到一个新向量中。

这就是我正在做的事情。

tmpmeans<-  rep(NA, 2);

for (i in unique(SplitnonMEANs$Line)){
  tmpmeans<- SplitnonMEANs$pheno_output[i]/SplitnonMEANs$pheno_output[i]
}

示例数据:

s;

Line phenotype FoodSource pheno_output
1    non        A           123
2    non        A           456
1    non        B           789
2    non        B           159

谁能帮我做到这一点?

4

2 回答 2

1

如果每个组只有两个值,则可以使用其中任何一个

divide <- function(x) {
    stopifnot(length(x) == 2L)
    x[1L]/x[2L]
} 
aggregate(pheno_output ~ Line, df, divide)
#   Line pheno_output
# 1    1    0.1558935
# 2    2    2.8679245
with(df, tapply(pheno_output, Line, divide))
#         1         2 
# 0.1558935 2.8679245 
sapply(split(df$pheno_output, df$Line), divide)
#         1         2 
# 0.1558935 2.8679245 
于 2014-09-23T02:32:11.553 回答
0

使用data.table会更快

 library(data.table)
  setDT(df)[,list(pheno_output=ifelse(.N==2, pheno_output[1]/pheno_output[2], NA_real_)), by=Line]
  #  Line pheno_output
 #1:    1 0.1558935
 # 2:   2 2.8679245
于 2014-09-23T03:53:32.730 回答