2016-04-21 32 views
0

我试图通过将.xls文件中的数据转换为.txt来导出数据,该数据包含一式三份的数据,第一行和第一列包含名称。我想创建另一个数据框(没有第一行和第一列),在这个数据框中我将使用我的一式三份的方法。导出.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。

所以,当我尝试,我得到:

错误的平均[N,(J - 1)]:尺寸

我试图在别处找到答案的数量不正确,但我找不到与我的情况完全吻合的东西。我真的是编码方面的初学者,所以有可能我有一个非常奇怪的方法来做到这一点。

回答

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); 

但(省略在头线作为数据线dec=','参数和(2)阅读所造成的双方(1))的数据类型问题将无论如何,仍然是一个问题。


1

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

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

data <- read.table("samplefile.txt", header=TRUE, dec=",") 
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