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

为何用intersect()组合starts_with()和取反ends_with()未达预期?

为什么intersect组合写法失效

dplyr里的intersect()是用来取两个正向选择器选中列的交集,比如intersect(starts_with("D"), contains("Q"))是筛选同时满足两个正向条件的列。但你用!ends_with("_TEXT")作为intersect的参数时,这里的!是select上下文里的否定操作符,不属于正向选择器的范畴,intersect无法正确解析这种反向选择的逻辑,导致最终匹配不到任何列。

单步实现需求的正确写法

方法1:用where()结合字符串判断

借助stringr包的字符串工具,直接对列名做逻辑判断,一步到位:

library(tidyverse)

df %>% 
  select(where(~ str_starts(.x, "D") & !str_ends(.x, "_TEXT")))

方法2:正向选择+反向排除

这是dplyr推荐的组合方式,先选所有D开头的列,再从中移除_TEXT结尾的列,和你两步操作的逻辑完全一致:

df %>% 
  select(starts_with("D"), -ends_with("_TEXT"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:20