如何在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
相关产品推荐
相关产品推荐

