通过在循环内对数据进行子集化来创建向量

时间:2014-02-25 00:29:48

标签: r

我有这样的数据:

  +---+----+----+----+------+
  | Su| Re | BM | CH | Eyes |
  +---+----+----+----+------+
  | 1 |  1 |  . |  0 |    0 |
  | 0 |  1 |  1 |  0 |    1 |
  | 1 |  1 |  2 |  . |    0 |
  | 0 |  1 |  3 |  1 |    1 |  
  | 1 |  2 |  . |  0 |    0 |
  | 0 |  2 |  2 |  0 |    1 |
  | 1 |  2 |  3 |  . |    1 |
  | 0 |  2 |  4 |  1 |    1 |
  +---+----+----+----+------+

我正在尝试根据此标准创建多个向量 Su = 1 Re = 1,2,3 .... ,Su = 1且Re = 1第一数据向量,Su = 1且Re = 3秒向量等等....我正在使用循环来迭代重新并基于 Su 重新对数据集进行子集化。这是我的代码,它不起作用,我需要帮助找出我出错的地方。

library(foreign)                            
a <- read.dta(".....Data.dta")

for (i in 1:10)               
{          
  b[i,]=subset(a, su==1 & re==i)
}     
b

2 个答案:

答案 0 :(得分:1)

您想要创建表示行的结构(或类)。

创建这些结构的向量。

现在创建索引表(std :: map),将排序条件作为第一个参数(键)以及向量(值)中行的指针或索引。

如果您打算以不同的顺序访问相同的记录,这是最好的方法。您可以按给定顺序访问索引表,而无需更改向量中的数据顺序。

这就是数据库如何处理表和索引。

答案 1 :(得分:0)

如果我理解你的问题,你可以像这样修改你的代码:

library(foreign)                            
a <- read.dta(".....Data.dta")

b <- list(rep(NA, 10))

for (i in 1:10)               
{          
  b[[i]] <- subset(a, su==1 & re==i)
}     

这将创建一个列表,其第i个条目是匹配的re == i的行。这就是你要追求的吗?