Как правильно зациклить? - PullRequest
       5

Как правильно зациклить?

0 голосов
/ 04 октября 2019

Вот данные ниже. Я не уверен, какой тип циклов я должен использовать, но вот что я хочу сделать: если для строки 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 голосов
/ 04 октября 2019

Вот решение с lapply и which:

res <- apply(data.matrix, 1, function(x) {
  x[[7]] <- length(which(x == 6)) > 0
  x
})
res <- t(res)
0 голосов
/ 04 октября 2019

Вот решение, использующее apply:

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

, где a - входные данные. Frame / tibble. Как указано выше, если у вас есть matrix, преобразуйте его в data.frame и выполните эту операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...