根据另一列平均数据框中的列 - 全部放入一个数组中

时间:2012-08-21 03:43:12

标签: r

X

 primer  timepoints  foldInduction
  Acan         0      1.0000000
  Acan        20      0.6779533
  Acan        20      1.9734277
   Fos        40     21.3731640
   Fos        60      1.8517668
   Fos        40    118.2970756
  Acan         0      1.0000000
   Fos        60     17.5241529

我希望在每个时间点为每个引物提供2个1. mean和2. stderr of foldInduction所以我想要的是一个最终数组,其中名称(数组)是时间点,数组本身就是手段。还尝试合并这个w / stderrs。

所以对于引物'Acan'意味着像这样的

 0     20 
1.0   1.325

我认为tapply可能会为此工作。所以这就是我一直在做的事情

       stderr <- function(x){sd(x,na.rm=TRUE)/sqrt(length(x))}
       means <- tapply(x$foldInductions,factor(as.numeric(x$timepoints)),mean,na.rm=T)
       stderrs <- tapply(x$foldInductions,factor(as.numeric(x$timepoints)),stderr)

此外,对于给定时间点,可能没有相同数量的foldInductions平均值,但我不认为这应该是一个问题。

如果你可以帮助我为一个很棒的引物创建这个数组。

1 个答案:

答案 0 :(得分:0)

我预见到即将发生的冲击。在这些相同的路线上有100多个不同的问题,通常比较许多解决方案的相对时间和优点。这是一个question and answer。我建议你找到一个适合你的框架并坚持下去。

以下是使用plyrsummarize的解决方案。

首先,重新创建您的数据:

x <- read.table(text = "primer      exptname concentrate timepoints replicate    day   realConc foldInduction
  Acan           0hr        55mM          0        b1 011311 0.05875824     1.0000000
  Acan KClpulse-5min        55mM         20        b1 011311 0.03983534     0.6779533
  Acan KClpulse-5min        55mM         20        b1 011311 0.11595514     1.9734277
   Fos KClpulse-5min        55mM         40        b1 011311 0.11964684    21.3731640
   Fos KClpulse-5min        55mM         60        b1 011311 0.01036618     1.8517668
   Fos KClpulse-5min        55mM         40        b1 011311 0.66222632   118.2970756
  Acan           0hr        55mM          0        b2 011411 0.05681637     1.0000000
   Fos KClpulse-5min        55mM         60        b2 011411 0.23492697    17.5241529", header = TRUE)

然后用ddply魔术做一些小组:

require(plyr)
ddply(x, .(primer, timepoints), summarize, 
      mean = mean(foldInduction, na.rm = TRUE), 
      sde = sqrt(var(foldInduction, na.rm = TRUE)/length(foldInduction))
      )

 primer timepoints     mean        sde
1   Acan          0  1.00000  0.0000000
2   Acan         20  1.32569  0.6477372
3    Fos         40 69.83512 48.4619558
4    Fos         60  9.68796  7.8361931

我没有100%跟踪你关于命名向量位的最后一点,但希望这能告诉你如何计算你需要的答案,你可以从那里将数据变成适当的格式。