R语言filter函数使用问题:筛选餐品数45-50的快餐店结果有误
问题分析与解决方案
代码核心错误
- 管道符语法使用错误:调用
%>%管道符后,前序的fastfood数据集会自动传入下一个函数的第一个参数,你在filter()里重复填入fastfood作为第一个参数,会导致逻辑匹配混乱。 - 筛选逻辑完全不符合需求:
item列存储的是单品名称,属于文本类型,无法和45、50这类数值做大小比较。你需要的是按餐厅分组统计单品总数量,再筛选单品数落在45-50区间的餐厅。
修正代码
根据你需要的输出结果,分为两种常用写法:
写法1:仅获取符合条件的餐厅名称及对应品类数量
# 提前加载依赖包 library(dplyr) library(openintro) fastfood <- openintro::fastfood U1 <- fastfood %>% group_by(restaurant) %>% summarise(item_count = n()) %>% filter(item_count >= 45 & item_count <= 50)
写法2:获取符合条件的餐厅对应的所有单品明细数据
library(dplyr) library(openintro) fastfood <- openintro::fastfood U1 <- fastfood %>% group_by(restaurant) %>% filter(n() >= 45 & n() <= 50) %>% ungroup()
验证方式
运行写法1后直接打印U1,可看到每个符合条件的餐厅对应的单品数都在45到50的区间内,完全匹配你的筛选需求。
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

