我最近是R编程的新手。
我想将现有的矩阵形式转换为新的矩阵形式。
我的矩阵如下,
数据()
1 2 3 4 5 6
1 0.60! 0.29! 1.42! 0.64 1.06 1.02
2 1.33! 0.68! 1.44! 1.44 1.05 1.03
3 0.60 0.67@ 0.64 1.37 2.40 1.00
4 1.37 0.29 1.43 0.63 1.05 2.32
5 1.39 0.68 1.40 1.46 1.06 1.02
6 0.63 0.68 0.61 1.46 1.74 1.05
7 1.39 0.68 1.01 0.65 2.43 2.27
....
我列出了第一行'!'并且' @'为了便于理解。
我想要的是,
VARI()
1 2 3 4 5 6 7
1 0.60! 0.29! 1.42! 1.33! 0.68! 1.44! 0.67@
2 0.29 1.42 0.64 0.68 1.44 1.44 0.64
3 1.42 0.64 1.06 1.44 1.44 1.05 1.37
4 0.64 1.06 1.02 1.44 1.05 1.03 2.40
5 1.33 0.68 1.44 0.60 0.67 0.64 0.29
6
….
我想在一行中列出1:2行和1:3列中的数据,并在vari矩阵中将(3,2)值定位到(1,7)。
我认为它可以与for循环一起使用。我制作了代码,然而,这是我第一次做到这一点。所以,它并没有很好地运作。
这是我的审判......
x=matrix(nrow = nrow(data)-2, ncol = 8);
for ( i in 1:(nrow(data)))
{ for ( j in 1:(ncol(data)))
{
x[i,j]<-((c(as.vector(t(as.matrix(data[i:i+1,j:j+2]))),data[i+2,j+1])))
}
}
x
然而,它代表以下句子
&#34;数据错误[i:i + 1,j:j + 2]:下标超出范围&#34;
请帮帮我!!!
答案 0 :(得分:1)
您需要改进索引到第二个数据框,我为此添加了n
计数器。
x=matrix(nrow = nrow(data)-2, ncol = 7);
n=1
for ( i in 1:(nrow(data)-3)){
for ( j in 1:(ncol(data)-2)){
x[n,]<-c(t(data[i:(i+1),j:(j+2)]),data[i+2,j+1])
n=n+1
}
}
x
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0.60 0.29 1.42 1.33 0.68 1.44 0.67
[2,] 0.29 1.42 0.64 0.68 1.44 1.44 0.64
[3,] 1.42 0.64 1.06 1.44 1.44 1.05 1.37
[4,] 0.64 1.06 1.02 1.44 1.05 1.03 2.40
[5,] 1.33 0.68 1.44 0.60 0.67 0.64 0.29
另外要小心i:i+1
与您所追求的i:(i+1)
不同。