导出文件时"Incorrect number of dimensions".txt



我正在尝试从.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

一式三份是行,因此,例如,对于我的"最终"数据框的大小写 (1,1),我想做 t1 列和行 A1、A2、A3 的情况的平均值。

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

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

试图在其他地方找到答案,但我找不到真正符合我的情况的东西。我真的是编码的初学者,所以我可能有一种非常奇怪的方法来做到这一点。

您的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

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

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

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

读取文件,将标题行保留为列名 ( 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) 在标题行中读取数据行引起的)无论如何仍然是一个问题。


  • read.table()
  • aggregate()
  • cbind()
  • seq_len()
  • rep()

最新更新