基本上,我有一个我创建的数据集,如下所示,其中标题是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]]))
解决此问题的最佳方法是什么?我完全错过了什么?!
答案 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
...