R语言遍历数据框唯一值遇NA报错,如何修改判断条件?
解决R语言中if条件因NA值报错的问题
问题根源在于df_id$value == "test"遇到NA时会返回NA,而any()函数在逻辑向量包含NA时会直接返回NA,if语句仅接受TRUE/FALSE作为判断条件,因此触发报错。
下面提供两种简单的修改方案:
方案一:用%in%替代==
%in%在遇到NA时会返回FALSE,不会生成NA值,能直接规避问题:
for(id in unique(df$event_id)) { df_id = df %>% filter(event_id == id) if(!any(df_id$value %in% "test")) { next } segments = get_segments(df_id) all_segments <- bind_rows(all_segments, segments) }
方案二:给any()添加na.rm = TRUE参数
让any()直接忽略NA值,仅判断非NA元素是否符合条件:
for(id in unique(df$event_id)) { df_id = df %>% filter(event_id == id) if(!any(df_id$value == "test", na.rm = TRUE)) { next } segments = get_segments(df_id) all_segments <- bind_rows(all_segments, segments) }
两种方案都能避免NA导致的报错,同时实现「如果当前ID对应的value列没有"test"值就跳过」的逻辑。
内容的提问来源于stack exchange,提问作者dlwhch
相关产品推荐
相关产品推荐

