使用if语句的条件过滤器

时间:2019-06-07 08:57:32

标签: r if-statement

我的数据由列和行组成。每列都有“ 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.

我想为每列中的数字分配一个列ID。

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 个答案:

答案 0 :(得分:2)

您可以使用

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