跨多个孔的系列读取,如何崩溃

Series of Reads Across Multiple Wells, How to Collapse

基本上,我创建了一个数据集,如下所示,其中 headers 是 384 孔板中每个孔的波长。

> minipeaks
   Wavel. X280 X282 X284 X286 X288 X290 X292 X294 X296
1      A1   34   62   57   52   48   89  104  134  142
2      A2   34   61   56   52   72   89  102  134  140
3      A3   68   62   84  105  119  134  185  227  266
4      A4   68   92   85  104  120  133  186  210  247
5      A5  103  123  141  182  191  222  269  361  424
6      A6  103  124  113  131  143  178  206  264  316
7      A7  136  153  141  156  192  244  285  364  404
8      A8  136  124  142  157  167  199  245  322  368
9      A9  170  155  171  208  215  244  327  418  478
10    A10  136  155  169  182  192  222  287  344  423

我在创建可以绘制的 data.frame 时遇到问题。我猜我需要为每一行取 2:10 列,制作一个考虑的波长序列,以及井名的重复矢量,并将其更改为 data.frame.

到目前为止,我已经尝试 运行 使用 plyr::ldply,但收效甚微,因为我不断收到以下错误:

> waves <- seq(from = 280, to = 850, by = 2)    
> ldply(minipeaks, function(z) {
+   data.frame(wavelength = waves[1:(dim(z)[2]-1)], 
+              well = rep(as.character(z$Wavel.), (dim(z)[2]-1)), 
+              value = as.numeric(z[, 2:dim(z)[2]]))
+   })
Error in 1:(dim(z)[2] - 1) : argument of length 0
Called from: data.frame(wavelength = waves[1:(dim(z)[2] - 1)], well = rep(as.character(z$Wavel.), 
    (dim(z)[2] - 1)), value = as.numeric(z[, 2:dim(z)[2]]))

解决此问题的最佳方法是什么?我完全错过了什么?!

我们可以使用 tidyr 包中的 gather 函数(您的数据存储在 dat 中):

library(tidyr)
gather(dat, sequence, read, -Wavel.)

  Wavel. sequence  read
1     A1     X280    34
2     A2     X280    34
3     A3     X280    68
4     A4     X280    68
5     A5     X280   103
6     A6     X280   103
...