多个井的系列读数,如何折叠

时间:2017-06-14 17:38:32

标签: r dplyr plyr

基本上,我有一个我创建的数据集,如下所示,其中标题是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]]))

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

1 个答案:

答案 0 :(得分:1)

我们可以使用 gather 包中的tidyr功能(您的数据存储在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
...