在包含30列的数据集上使用rollapply

时间:2014-01-24 08:26:43

标签: r zoo rollapply

我是R的新手,正在尝试获取基因表达数据集的方法。这些文件是一个csv文件,有185行(基因名称)和30列(时间点一式三份)。

我使用以下命令导入csv。归档到R

  

read.csv('〜/ Desktop / WNV Spleen.csv',row.names = 1)

        CM1     CM2     CM3     D1M1    D1M2    D1M3    D2M1    D2M2 etc..... 
Atf2    3152.9  6178.12 4660.91 6900.13 8172.9  7928.51 6100.99 6438.84
Bcl6    123.64  491.09  52.53   575.6   673.36  415.57  635.76  364.4
etc....

然后我确保将其作为矩阵读取

  

sp< -as.matrix(read.csv('〜/ Desktop / WNV Spleen.csv',row.names = 1))   is.matrix(SP)   [1] TRUE

然后我尝试使用以下命令执行rollapply,该命令执行功能但不执行正确的功能。想要计算每行的平均值。

z<-zoo(sp)
> rollapply(z[,1], width=3, mean, by=3, by.column=TRUE)
           2            5            8           11           14           17           20           23           26           29           32           35           38 
  2939.96000  19679.89333 111739.20333  36303.04667  18477.80333    137.38000    116.77333    295.37000    103.03667    123.64333     96.16667    467.09667  22448.12667 
          41           44           47           50           53           56           59           62           65           68           71           74           77 
  7143.83333   9575.48667    549.52333    157.99000    274.76333    329.71667    288.50000  17893.93333   3221.59333   1621.10000   9513.66667    906.71667     54.95333 
          80           83           86           89           92           95           98          101          104          107          110          113          116 
   377.80000     61.82333    597.60667    281.63000    941.06333     48.08333     82.42667     61.82000   1298.25333    274.76667   6985.84667    157.98667    838.03000 
         119          122          125          128          131          134          137          140          143          146          149          152          155 
  2301.14000   1099.05333   2198.10667   3695.56333   3544.44000  26713.82667    309.10667    899.84667    872.37333   2328.61667   2685.80667   3125.43000    934.19333 
         158          161          164          167          170          173          176          179          182 
  4190.13333   6683.60667    762.46667   3049.86667    583.87000    460.23000    590.74000    171.72667   1689.79333 

尝试按如下方式重写命令:

> rollapply(z[1,], width=3, mean, by=3, by.row=TRUE)
Error in seq.default(start.at, NROW(data), by = by) : 
  wrong sign in 'by' argument
> rollapply(z[2, ], width=3, mean, by=3, by.row=TRUE)
Error in seq.default(start.at, NROW(data), by = by) : 
  wrong sign in 'by' argument

所以没有用。有人能帮我搞清楚我做错了什么???提前谢谢!!!!

1 个答案:

答案 0 :(得分:0)

sp<-matrix(1:100,10)
rownames(sp)<-sample(LETTERS,10)

sp
  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
I    1   11   21   31   41   51   61   71   81    91
M    2   12   22   32   42   52   62   72   82    92
Z    3   13   23   33   43   53   63   73   83    93
F    4   14   24   34   44   54   64   74   84    94
S    5   15   25   35   45   55   65   75   85    95
L    6   16   26   36   46   56   66   76   86    96
B    7   17   27   37   47   57   67   77   87    97
C    8   18   28   38   48   58   68   78   88    98
K    9   19   29   39   49   59   69   79   89    99
J   10   20   30   40   50   60   70   80   90   100

data.frame(gene=rownames(sp),mean=apply(sp,1,mean))
  gene mean
I    I   46
M    M   47
Z    Z   48
F    F   49
S    S   50
L    L   51
B    B   52
C    C   53
K    K   54
J    J   55