"维度数不正确"导出.txt文件时

时间:2016-04-21 17:17:45

标签: r

我尝试从.xls文件中导出数据,将其转换为.txt,其中包含一式三份的数据,第一行和第一行包含名称。我想创建另一个数据框(没有第一行和第一行),我可以在其中进行三次重复。

我试过了:

fileavg <- readline(prompt="Add your .txt file")
data <- read.table(fileavg, header=FALSE)


a <- 2
b <- a + 2
var <- 0

l1 <- nrow(data) - 1
l2 <- ncol(data) - 1
l0 <- l1 / 3
avg <- 0


for (n in (1:l0)) {
  for (j in (2:(l2+1))) {
    for (i in (a:b)) {
      avg[n,(j-1)] <- avg[n,(j-1)] + data[i,j]
    }
    avg[n,(j-1)] <- avg[n,(j-1)] / 3
  }
  a <- a + 3
  b <- b + 3
}

例如,我可以使用的典型.txt:

Well    t1  t2  t3  t4  t5  t6  t7  t8  t9  t10 t11 t12 t13 t14 t15 t16 t17 t18 t19
A1  0,53    0,35    0,51    0,69    1,01    1,01    1,34    1,51    2,31    3,14    5,85    6,19    9,7 10,41   12,57   14,34   15,96   18,53   22,18
A2  1,04    0,83    0,84    0,84    0,83    1,04    1,42    1,82    2,77    2,77    6,37    6,76    10,9    8,99    14,15   13,96   19,44   18,52   24,16
A3  1,08    0,9 0,9 0,9 0,73    0,73    1,91    1,74    3,85    3,68    6,32    5,82    10  9,68    14,61   13,09   20,21   21,27   27,06
A4  1,58    1,13    1,35    1,35    2,03    2,03    2,41    2,63    2,81    2,81    3,31    2,89    4,56    4,37    7,21    6,82    10,71   9,96    14,7
A5  0,58    0,39    0,6 0,6 0,78    0,98    1,54    1,35    2,88    3,06    4,23    3,87    8,98    11,44   16,83   15,68   23,15   21,1    28,05
A6  1,04    0,62    1,24    1,04    1,43    1,43    1,35    1,35    2,09    1,9 3,6 3,24    5,75    5,05    9,98    7,82    13,27   11,17   17,42
B1  0,87    0,87    0,91    0,91    2,17    5,07    11,54   21,65   40,25   57,63   83,22   90,98   96,24   97,98   99,06   99,19   99,72   100 56,28
B2  0,33    0,33    0,77    0,77    1,56    4,11    8,11    11,95   23,02   32,34   54,12   65,72   84,72   93,41   97,1    98,74   99,63   99,88   99,88
B3  1,57    1,4 1,45    1,29    2,78    4,1 8,41    13,04   21,66   25,25   43,06   52,69   68,83   77,72   91  94,37   98,37   99,32   99,87
B4  0,44    0,22    0,45    0,45    0,46    0,93    0,9 1,13    1,74    2,17    2,95    2,53    5,16    4,96    9,73    8,78    11,79   12,14   15,44
B5  0   0   0   0   0,22    0,89    3,13    3,55    5,5 6,92    10,13   10,71   18,28   17,73   27,62   27,8    36,12   37,65   44,08
B6  0   0   0,4 0,4 0,96    1,73    3,98    5,88    11,35   13,27   18,23   20,4    30,02   28,69   40,71   41,01   48,98   46,78   54,03
C1  1,25    1,08    0,93    0,74    0,92    0,73    3,55    2,66    6,17    7,89    13,27   11,73   22,78   18,79   34,71   30,86   44,79   38,08   23,95
C2  0,58    0,39    0,6 0,6 0,39    0,98    1,97    2,17    3,67    4,77    7,52    8,44    11,88   11,35   18,38   17,53   23,95   22,77   34,4
C3  0,91    0,54    1,06    0,89    1,73    2,25    2,39    3,08    4,82    5,95    9,86    9,86    16,85   13,9    23,94   17,72   30,19   23,91   38,07
C4  1,17    0,97    1,19    0,68    2,45    4,89    13,51   21,09   47,6    58,21   81,35   84,82   96,85   98,18   99,68   99,84   99,84   100 100
C5  0,57    0,57    1   0,83    4,56    16,45   48,05   68,08   92,87   95,69   99,2    99,36   100 100 100 99,69   100 100 100
C6  0   0   0,33    0   3,21    7,78    26,86   40,71   72,37   82,24   94,64   96,27   99,2    99,84   99,84   100 100 100 100
D1  4,86    10,44   30,43   52,31   80,4    89,13   96,37   98,33   99,73   99,86   99,87   100 100 100 100 100 100 100 100
D2  5,14    15,83   38,47   55,48   82,25   89,72   97,39   98,62   99,87   99,87   100 100 100 100 100 100 100 100 100
D3  3,32    9,56    26,45   45,21   76,14   85,92   96,57   97,89   100 100 100 100 100 100 100 99,75   100 100 100
D4  0,93    0,93    1,23    1,41    2,09    2,62    3,97    4,49    5,75    7   8,91    10,91   17  20,84   29,47   34,44   40,19   45,47   50,65
D5  0,85    0   1,23    1,38    1,67    2,12    2,93    4,78    6,97    8,4 10,6    13,29   18,49   22,99   27,94   33,17   42,24   47,03   53,63
D6  0,31    0,15    0,69    0,83    1,35    1,75    2,84    4,05    7,48    9   12,62   15,12   18,49   21,05   25,64   30,95   36,56   37,86   46,96
E1  0,68    1,19    1,47    1,8 4,46    7,6 16,41   21,32   40  48,7    65,99   70,92   83,14   83,81   93,23   93,39   98,06   98,06   99,36
E2  0,21    0,21    0,22    0,22    0,22    0,43    0,64    0,64    0,64    0,64    2,03    2,03    3,8 4   6,01    7,3 10,93   11,13   15,15
E3  0,65    0,98    2,37    2,84    10,14   17,55   31,81   41,27   57,75   62,81   75  77,63   87,15   88,65   95  95,83   98,04   98,04   98,28
E4  1,51    1,29    1,34    1,34    1,55    1,32    1,55    1,33    2,44    2,44    2,79    2,58    5,26    5,26    7,16    7,39    11,42   10,72   13,95
E5  0,8 0,4 1,02    1,02    1,64    1,43    1,78    1,78    1,76    1,95    2,16    1,96    3,46    2,88    4,54    3,55    7,35    8,32    10,77
E6  0,2 0,2 0,19    0,19    0,75    0,75    1,23    0,7 2,02    1,18    2,6 1,95    5,27    4,97    9,64    7,01    11,21   10,6    14,84
F1  0   0   0,2 0,2 0,2 0,2 0,21    0,41    0,2 0,41    0,59    0,79    1,99    2,19    7,59    8,64    14,29   14,01   32,27
F2  0,95    0,95    0,95    0,95    1,18    0,98    1,54    1,35    3,45    4,02    5,17    6,32    8,41    8,6 13,62   36,56   28,1    26,59   37,62
F3  0,72    0,72    0,36    0,36    0,36    0,72    1,1 1,65    2,2 2,54    3,9 4,07    6,46    7,82    11  25,09   26,67   24,67   38,85
F4  0,22    0,22    0,22    0,22    0,22    0,22    0,64    0,64    1,32    1,1 2,42    2,2 5,92    7,02    13,06   11,88   15,64   16,11   19,15
F5  0,68    0,45    1,11    1,33    0,66    0,66    0,64    1,06    1,68    1,47    2,13    2,35    2,55    3,83    5,73    6,83    9,26    9,03    12,68
F6  0   0   0   0   0,2 0,2 0,19    0,37    0,73    0,73    1,37    0,86    1,81    1,15    3,38    3,22    3,83    4,17    7,36
G1  0,47    0,47    0,44    0,44    0,41    1,43    6,69    8,72    20,4    31,59   54,26   63,65   87,72   94,39   99,82   99,12   100 100 100
G2  0,92    0,73    0,87    1,05    2,38    7,92    14,96   23,17   46,56   61,99   85,69   92,3    96,63   97,9    99,86   100 100 100 100
G3  0,59    0,59    1,03    2,23    12,42   21,24   32,92   46,08   76,8    88,02   96,04   98,33   99,4    100 100 100 100 100 100
G4  0,41    0,41    0,42    0,42    0,62    0,42    0,6 0,6 0,6 0,4 1,38    1,58    2,2 2,61    4,15    5,09    5,99    8,24    10,96
G5  0,85    0,85    1,1 1,1 0,9 0,9 1,1 1,1 1,41    1,87    1,84    2,76    4,43    3,77    6,25    7,64    9,57    10,53   11,9
G6  0,61    0,4 0,39    0,2 0,19    0   0   0,39    0,74    0,55    0,93    0,75    2,13    1,42    4,22    3,34    6,7 5,33    9,71
H1  1,62    1,62    1,54    1,85    2,11    2,11    1,97    1,97    1,78    1,78    2,48    2,75    3,18    2,92    5,61    5,61    7,33    8,38    11,87
H2  1,32    1,32    1,23    1,23    0,74    0,98    2,26    1,25    3,42    3,91    7,29    7,76    10,83   14,75   19,65   30,02   43,62   51,65   72,69
H3  0,88    0,88    0,85    0,56    0,55    0,55    0,92    0,92    1,11    1,11    1,35    2,16    3,54    4,63    10,05   15,98   28,24   37,05   46,79
H4  0,27    0,27    0,26    0   0,26    0,26    0,28    0,28    0,48    0,72    1,19    0,71    0,93    1,64    2,78    3,25    7,85    7,62    8,51
H5  0,55    0,55    0,78    0,78    0,53    0,53    0,83    0,83    0,81    0,81    1,26    1,26    1,72    1,47    4,31    3,83    5,59    5,83    8,67
H6  0   0   0   0   0   0   0   0   0   0   0,8 0,8 1   1,25    1,96    1,22    3,25    3,02    5,97

一式三份,例如,对于我的&#34;最终&#34;的情况(1,1)。数据框,我想做列t1的情况,以及行A1,A2,A3。

所以,当我尝试这个时,我得到:

  

avg [n,(j - 1)]中的错误:维数不正确

我试图在其他地方找到答案,但我找不到与我的情况完全匹配的东西。我真的是编码的初学者,所以我有一种非常奇怪的方式可以做到这一点。

3 个答案:

答案 0 :(得分:2)

您的read.table应使用dec=","

下面,使用dplyr来避免循环的解决方案(存在基础R解决方案):

# we use ',' as decimal sign, we consider the first row as header (drops it in a way), and remove the first column
data <- read.table(fileavg, header=TRUE, dec=",")[, -1]

# we load dplyr. install.packages("dplyr") if you don't have it
library(dplyr)

# The number of triplicates (be careful since some may be dropped)
nr <- floor(nrow(data)/3)

# we create a grouping variable, and average each column within each group
data %>% mutate(group=factor(rep(1:nr, each=3))) %>% 
  group_by(group) %>% 
  summarise_each(funs(mean)) %>% 
  ungroup()

Source: local data frame [16 x 20]

group        t1          t2         t3         t4         t5         t6         t7
(fctr)     (dbl)       (dbl)      (dbl)      (dbl)      (dbl)      (dbl)      (dbl)
1       1 0.8833333  0.69333333  0.7500000  0.8100000  0.8566667  0.9266667  1.5566667
2       2 1.0666667  0.71333333  1.0633333  0.9966667  1.4133333  1.4800000  1.7666667
3       3 0.9233333  0.86666667  1.0433333  0.9900000  2.1700000  4.4266667  9.3533333
4       4 0.1466667  0.07333333  0.2833333  0.2833333  0.5466667  1.1833333  2.6700000
5       5 0.9133333  0.67000000  0.8633333  0.7433333  1.0133333  1.3200000  2.6366667

答案 1 :(得分:1)

文件中的十进制数用逗号分隔。为了正确读取数据,需要指定这一事实。

如果samplefile.txt.txt文件的名称,请尝试:

data <- read.table("samplefile.txt", header=TRUE, dec=",")

答案 2 :(得分:0)

如果您正确读入文件,将标题行保留为列名(header=T)并解释数字语法(dec=','),那么您可以将aggregate()与合成分组一起使用计算一式三份的列意味着:

df <- read.table('input.txt',header=T,dec=',');
aggregate(.~trip,cbind(df[-1L],trip=rep(seq_len(nrow(df)%/%3L),each=3L)),mean);
##    trip        t1          t2         t3         t4         t5         t6         t7         t8         t9       t10       t11         t12        t13        t14        t15       t16        t17        t18        t19
## 1     1 0.8833333  0.69333333  0.7500000  0.8100000  0.8566667  0.9266667  1.5566667  1.6900000  2.9766667  3.196667  6.180000   6.2566667  10.200000   9.693333  13.776667 13.796667  18.536667  19.440000  24.466667
## 2     2 1.0666667  0.71333333  1.0633333  0.9966667  1.4133333  1.4800000  1.7666667  1.7766667  2.5933333  2.590000  3.713333   3.3333333   6.430000   6.953333  11.340000 10.106667  15.710000  14.076667  20.056667
## 3     3 0.9233333  0.86666667  1.0433333  0.9900000  2.1700000  4.4266667  9.3533333 15.5466667 28.3100000 38.406667 60.133333  69.7966667  83.263333  89.703333  95.720000 97.433333  99.240000  99.733333  85.343333
## 4     4 0.1466667  0.07333333  0.2833333  0.2833333  0.5466667  1.1833333  2.6700000  3.5200000  6.1966667  7.453333 10.436667  11.2133333  17.820000  17.126667  26.020000 25.863333  32.296667  32.190000  37.850000
## 5     5 0.9133333  0.67000000  0.8633333  0.7433333  1.0133333  1.3200000  2.6366667  2.6366667  4.8866667  6.203333 10.216667  10.0100000  17.170000  14.680000  25.676667 22.036667  32.976667  28.253333  32.140000
## 6     6 0.5800000  0.51333333  0.8400000  0.5033333  3.4066667  9.7066667 29.4733333 43.2933333 70.9466667 78.713333 91.730000  93.4833333  98.683333  99.340000  99.840000 99.843333  99.946667 100.000000 100.000000
## 7     7 4.4400000 11.94333333 31.7833333 51.0000000 79.5966667 88.2566667 96.7766667 98.2800000 99.8666667 99.910000 99.956667 100.0000000 100.000000 100.000000 100.000000 99.916667 100.000000 100.000000 100.000000
## 8     8 0.6966667  0.36000000  1.0500000  1.2066667  1.7033333  2.1633333  3.2466667  4.4400000  6.7333333  8.133333 10.710000  13.1066667  17.993333  21.626667  27.683333 32.853333  39.663333  43.453333  50.413333
## 9     9 0.5133333  0.79333333  1.3533333  1.6200000  4.9400000  8.5266667 16.2866667 21.0766667 32.7966667 37.383333 47.673333  50.1933333  58.030000  58.820000  64.746667 65.506667  69.010000  69.076667  70.930000
## 10   10 0.8366667  0.63000000  0.8500000  0.8500000  1.3133333  1.1666667  1.5200000  1.2700000  2.0733333  1.856667  2.516667   2.1633333   4.663333   4.370000   7.113333  5.983333   9.993333   9.880000  13.186667
## 11   11 0.5566667  0.55666667  0.5033333  0.5033333  0.5800000  0.6333333  0.9500000  1.1366667  1.9500000  2.323333  3.220000   3.7266667   5.620000   6.203333  10.736667 23.430000  23.020000  21.756667  36.246667
## 12   12 0.3000000  0.22333333  0.4433333  0.5166667  0.3600000  0.3600000  0.4900000  0.6900000  1.2433333  1.100000  1.973333   1.8033333   3.426667   4.000000   7.390000  7.310000   9.576667   9.770000  13.063333
## 13   13 0.6600000  0.59666667  0.7800000  1.2400000  5.0700000 10.1966667 18.1900000 25.9900000 47.9200000 60.533333 78.663333  84.7600000  94.583333  97.430000  99.893333 99.706667 100.000000 100.000000 100.000000
## 14   14 0.6233333  0.55333333  0.6366667  0.5733333  0.5700000  0.4400000  0.5666667  0.6966667  0.9166667  0.940000  1.383333   1.6966667   2.920000   2.600000   4.873333  5.356667   7.420000   8.033333  10.856667
## 15   15 1.2733333  1.27333333  1.2066667  1.2133333  1.1333333  1.2133333  1.7166667  1.3800000  2.1033333  2.266667  3.706667   4.2233333   5.850000   7.433333  11.770000 17.203333  26.396667  32.360000  43.783333
## 16   16 0.2733333  0.27333333  0.3466667  0.2600000  0.2633333  0.2633333  0.3700000  0.3700000  0.4300000  0.510000  1.083333   0.9233333   1.216667   1.453333   3.016667  2.766667   5.563333   5.490000   7.716667

关于您的错误消息,问题是您将avg初始化为向量(一维数据类型),但之后您尝试将其索引为矩阵(二维数据类型)。您可以通过像这样初始化avg来解决问题:

avg <- matrix(0,l0,l2);

但数据类型问题(由(1)省略dec=','参数和(2)在标题行中读取数据线引起)仍然是一个问题。