通过for循环提取数据

时间:2017-03-08 14:51:45

标签: r

我有大量的矩阵,调用train$X这是一个带有1和0的二进制数据

我想提取并创建另外两个列表,其中包含1作为list1,0作为list2使用for循环

我的R代码无效

X <- c(0,1,0,1,0,1)
Y <- c(1,1,1,1,1,0)
train<- as.matrix (cbind(X,Y))
list1 <- list()
list2 <- list()

for(i in 1:length(train)) {
  if(train[i]== 1)
    list1 = train[i]
 else
    list2 = train[i]

}

因此 list1包含(1,1,1,1,1,1,1) list2包含(0,0,0,0)

2 个答案:

答案 0 :(得分:0)

我认为最好的方法不是循环,它不是您想要的列表,而是向量对象,我建议在矩阵上使用==,如下所示:

X <- c(0,1,0,1,0,1)
Y <- c(1,1,1,1,1,0)
train <- cbind(X,Y)

v1 <- train[train == 1]
v2 <- train[train == 0] 

如果您真的想要循环:

v1 <- c() # It is not necessary
v2 <- c() # It is not necessary

for(i in 1:nrow(train)){
  for(j in 1:ncol(train)){
    if(train[i, j] == 1){
      v1 <- c(v1, train[i, j])
    }else{
      v2 <- c(v2, train[i, j])
    }
  }
}

最后一个解决方案,但并非最不重要:

v1 <- rep(1, sum(train == 1))
v2 <- rep(0, sum(train == 0))

所以他们有很多不同的解决方案。

答案 1 :(得分:-2)

你必须“拯救”&#39;每个值,否则你只是在循环结束时得到一个值。无论最后一班火车$ X是什么,这就是这个循环将要拯救的东西。

这是一种类似的方法来保存它:

 all <- data.frame()
 list1 <- data.frame()
 list2 <- data.frame()

 for(i in 1:length(train$X)) {
  if(train$X[i]== 1)
    list1 = train$X[i]
  else
    list2 = train$X[i]

  all <-rbind(all, list1, list2)
 }

如果没有可重复的示例,很难解决您的问题。