R语言:如何用for循环/if语句实现等价于subset的筛选功能?
问题分析与修正方案
原代码的核心问题:
- 错误遍历列索引而非行,导致重复打印整列
- 判断条件混淆了循环索引
i和Altitude的实际数值 - 未处理
Altitude列中的NA值
修正后的代码
# 初始化空向量存储结果 filtered_acronym <- c() # 遍历每一行的索引 for (i in 1:nrow(data_sat_csv)) { # 获取当前行的Altitude值 alt <- data_sat_csv[i, 8] # 跳过NA值 if (is.na(alt)) { next } # 判断Altitude是否<=2000,满足则收集对应Acronym if (alt <= 2000) { filtered_acronym <- c(filtered_acronym, data_sat_csv$Acronym[i]) } } # 输出结果 print(filtered_acronym)
代码说明
- 先创建空向量
filtered_acronym,用来存储筛选后的结果,避免每次循环打印整列 - 循环范围改为
1:nrow(data_sat_csv),遍历每一行而非列 - 先通过
is.na(alt)判断当前行的Altitude是否为NA,是则跳过该行 - 只有当
Altitude <= 2000时,才将对应行的Acronym添加到结果向量中 - 最后统一输出结果,和
subset(data_sat_csv, Altitude <= 2000, Acronym)的输出一致
内容的提问来源于stack exchange,提问作者optictwo
相关产品推荐
相关产品推荐

