如何使用for-loop对部分数据进行子集化

时间:2017-11-14 02:20:14

标签: r for-loop dataframe subset

我最近是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;

请帮帮我!!!

1 个答案:

答案 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)不同。