Условный фильтр с операторами if - PullRequest
0 голосов
/ 07 июня 2019

Мои данные состоят из столбцов и строк.Каждый столбец имеет «NA» и разные номера. Например, column1:

2 1 NA NA NA 8 NA NA 1 NA 1 NA NA NA NA 15 NA 2 NA 1 NA NA NA NA NA NA 12 NA NA 2 NA NA 2 NA NA NA 6 1 NA NA NA 2 NA NA NA 4 1 NA NA NA 2.

Я хочу назначить идентификатор столбца для номеров в каждом столбце.

for(j in 1:54){
    if(!(col[j] <-"NA")){
    col[j] <- i
    }
}

Ожидаемый результат для столбца 1:

1 1 NA NA NA 1 NA NA 1 NA 1 NA NA NA NA 1 NA 1 NA 1 NA NA NA NA NA NA 1 NA NA 1 NA NA 1 NA NA NA 1 1 NA NA NA 1 NA NA NA 1 1 NA NA NA 1

**, столбец 2: **

2 2 NA NA NA 2 NA NA 2 NA 2 NA NA NA NA 2 NA 2 NA 2 NA NA NA NA NA NA 2 NA NA 2 NA NA 2 NA NA NA 2 2 NA NA NA 2 NA NA NA 2 2 NA NA NA 2

1 Ответ

2 голосов
/ 07 июня 2019

Вы можете использовать

v <- c(2, 1, NA, NA, 4, 5, NA)
id <- ifelse(!is.na(v), 1, NA)
id
1  1 NA NA  1 1 NA

Это означает, что вам здесь не нужен цикл for.Если вы можете применить функцию к вектору, вам следует избегать использования цикла for.

Также, пожалуйста, предоставьте ваши данные, чтобы другие могли их использовать (как в моем коде выше).

РЕДАКТИРОВАТЬ

Согласно комментариям у вас есть несколько столбцов.Вы можете использовать тот же код.Смотри здесь

df <- data.frame(a= c(2, 1, NA, NA, 4, 5, NA), b= c(3, NA, NA, NA, 5, NA, 6))
id <- sapply(1:ncol(df), function(i){
             ifelse(!is.na(df[ , i]), i, NA)})
id
      a  b
[1,]  1  2
[2,]  1 NA
[3,] NA NA
[4,] NA NA
[5,]  1  2
[6,]  1 NA
[7,] NA 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...