R 通过对循环中的数据进行子集划分来创建向量

R 通过对循环中的数据进行子集划分来创建向量,r,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 |

我有这样的数据:

  +---+----+----+----+------+
  | 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 |
  +---+----+----+----+------+
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)
}     
我正试图根据这个标准创建多个向量 Su=1Re=1,2,3….,Su=1和Re=1第一个数据向量,Su=1和Re=3第二个向量,依此类推……我正在使用一个循环来迭代Re并基于SuRe对数据集进行子集设置。这是我下面的代码,它不工作,我需要帮助找出我哪里出了问题

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

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

a您希望创建一个表示行的结构(或类)

创建这些结构的向量

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

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


这就是数据库处理表和索引的方式。

如果我正确理解您的问题,您可以这样修改代码:

  +---+----+----+----+------+
  | 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 |
  +---+----+----+----+------+
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)
}     
库(外文)

为什么这个标记为C++?气味,就像一个数据库,使用这个数据库。(1)在你的示例数据中,你有“代码> SU<代码/代码>和<代码> Re/COD>,在你的代码中,你有<代码> SU/COD>和<代码> Re>代码>。(2) 当你说它不起作用时,到底发生了什么?您是否收到错误消息?(3) 有关如何提出一个好的重复性问题的信息,请参见。完美的丹尼斯,这太棒了,你的建议奏效了。非常感谢。@bison2178:如果您喜欢这个答案或认为它有帮助,请单击答案旁边的绿色复选标记。