我有大量的矩阵,调用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)
答案 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)
}
如果没有可重复的示例,很难解决您的问题。