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

如何在R语言管道%>%中使用which()访问数据框列

解决方法

你可以通过两种常见方式实现用管道%>%配合which()访问数据框列名,避免重复写df$:

方法1:用大括号包裹并通过.指代数据框

在大括号内,.代表管道传入的df,直接用.访问列即可:

row_zero <- df %>% { which(.$col1 == 0 & grepl("A", .$col2, fixed = TRUE)) }
row_zero
# [1] 1 6

方法2:结合with()函数

with()可以让你直接引用数据框的列名,配合管道更简洁:

row_zero <- df %>% with(which(col1 == 0 & grepl("A", col2, fixed = TRUE)))
row_zero
# [1] 1 6

为什么你的尝试失败?

  • 第一种尝试:df %>% which(col1 == 0 & ...) 错误是因为管道把df传给了which()的第一个参数,而which()需要的是逻辑向量,不是数据框,所以报错"argument to 'which' is not logical"。
  • 第二种尝试:df %>% { which(col1 ==0 & ...) } 错误是因为大括号内的代码没有引用传入的数据框,R找不到col1这个独立对象,必须用.明确指代管道传入的df才能访问列。

另外,如果你不需要返回行号,而是直接筛选出符合条件的行,也可以用dplyr::filter():

library(dplyr)
filtered_df <- df %>% filter(col1 == 0 & grepl("A", col2, fixed = TRUE))
filtered_df
#   ID col1 col2
# 1  1    0   A1
# 2  6    0   A3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:45:02