如何正确循环?

时间:2019-10-03 21:57:19

标签: r loops

这是下面的数据。我不确定应该使用哪种类型的循环,但是这是我要执行的操作:如果对于第1行,存在6,那么对于第7列,我们为“是”,如果没有如果存在6,则第7列为“否”。忽略第8和9列。

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
 [1,]    1    6    1    1    6    1   NA   NA   NA
 [2,]    5    5    5    5    5    5   NA   NA   NA
 [3,]    1    1    6    1    1    6   NA   NA   NA
 [4,]    5    5    5    5    5    5   NA   NA   NA
 [5,]    6    1    1    6    1    1   NA   NA   NA
 [6,]    5    5    5    5    5    5   NA   NA   NA
 [7,]    1    6    1    1    6    1   NA   NA   NA
 [8,]    5    5    5    5    5    5   NA   NA   NA
 [9,]    1    1    6    1    1    6   NA   NA   NA
[10,]    5    5    5    5    5    5   NA   NA   NA

这是我的代码。

data.matrix <- matrix(data=NA,nrow = b, ncol = n+3)
b <- 10
n <- 6
for (i in 1:b)
{
  data.matrix[,1:n] <- sample(6,n,replace=T)
}

侧面说明:我一直收到此错误 “条件的长度> 1,并且只会使用第一个元素”

2 个答案:

答案 0 :(得分:0)

这是使用apply的解决方案:

a[,7] <- apply(a, 1, function(x) ifelse(max(x,na.rm = T) == 6,"YES","NO"))

其中a是输入data.frame / tibble。如上所述,如果您有matrix,则将其转换为data.frame并执行此操作。

答案 1 :(得分:0)

这是lapplywhich的解决方案:

res <- apply(data.matrix, 1, function(x) {
  x[[7]] <- length(which(x == 6)) > 0
  x
})
res <- t(res)