首页 > 解决方案 > 带有 if 语句的条件过滤器

问题描述

我的数据由列和行组成。每列都有“NA”和不同的数字。 例如 column1 是:

2 1 1 NA 1 NA NA NA

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

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

列 1 的预期结果:

1 1 NA NA NA 1 NA NA 1

**第 2 栏:**

2 2 NA NA NA 2 NA NA 2

标签: rif-statement

解决方案


您可以使用

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

推荐阅读