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