You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中Pipe、filter与select()的代码顺序及列选择疑问

关于dplyr管道中select()位置与列选择的疑问解答

先看给出的解决方案代码:

surveys_hindfoot_cm <- surveys %>% # 1
   filter(!is.na(hindfoot_length)) %>% # 2
   mutate(hindfoot_cm = hindfoot_length / 10) %>% # 3
   filter(hindfoot_cm < 3) %>% # 4
   select(species_id, hindfoot_cm) # 5

为什么select()放在最后一行?

  • 前面的所有操作都依赖原始列或新生成的列:
    • 步骤2要过滤hindfoot_length的NA值,必须保留这个原始列才能做判断;
    • 步骤3要生成厘米单位的hindfoot_cm,得用hindfoot_length来计算;
    • 步骤4要筛选hindfoot_cm小于3的行,也得先有这个新列才行。
      如果一开始就用select只选目标列,后面的filter和mutate都会因为缺少必要数据报错,所以必须等所有数据清洗、转换、筛选操作完成后,再最终选择我们要保留的列。

为什么选择hindfoot_cm而非hindfoot_length?

  • 练习题明确要求新数据框包含转换为厘米的hindfoot_cm列,原始的hindfoot_length是毫米单位,步骤3已经把它转成了厘米的hindfoot_cm,这才是题目要的目标列。而且前面已经用原始列完成了NA过滤和数值筛选,最终只需要保留题目指定的两列就够了。

内容的提问来源于stack exchange,提问作者Spybuster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:31:09