我尝试从.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)]中的错误:维数不正确
我试图在其他地方找到答案,但我找不到与我的情况完全匹配的东西。我真的是编码的初学者,所以我有一种非常奇怪的方式可以做到这一点。
答案 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)在标题行中读取数据线引起)仍然是一个问题。