r - 带有 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
解决方案
您可以使用
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
推荐阅读
- hibernate - @ElementCollection 用于持久化 Set
- reactjs - Dragula拖动不能很好地识别dropzones
- haskell - 自定义高阶函数调用在约束错误中给出非类型变量参数
- django - Django将对象信息获取到方法而无需重新输入
- c++ - 复杂情况的C++比较器传参问题
- javascript - Chrome 中的回调执行时间与预期不符
- javascript - 如何开始使用 Webpack
- javascript - 如何使用 Tampermonkey 或 Stylebot 自动更改“显示条目”值?
- nativescript - 从当前 Java 上下文调用方法
- python - 使用莱布尼茨公式计算 pi 而无需导入任何东西