r - R:过滤器()基于从列表中命名的列?
问题描述
如何使用filter()
列表中的列名?
我认为以下方法会起作用,但事实并非如此:
filter(dt, myColList[1] == "entry")
^^ 其中:myColList <- c("col1", "col2", "col3")
注意:filter(dt, col1 == "entry")
工作正常,但这将在一个函数中,我想提供特定的列名..
解决方案
我们可以使用sym
将其转换为符号,然后进行评估 ( !!
)
library(tidyverse)
dt %>%
filter( !! rlang::sym(myColList[1]) == "entry")
或使用filter_at
which 可以将字符串作为输入变量
dt %>%
filter_at(vars(myColList[1]), all_vars(.== 'entry'))
作为一个可重现的例子
myColList <- names(iris)[1:3]
data(iris)
iris %>%
filter(!! rlang::sym(myColList[1]) > 5)
iris %>%
filter_at(vars(myColList[1]), all_vars(. > 5))
推荐阅读
- python - Python - Networkx:如何从节点绘制所有连接的组件?
- python - 使用 U-Net 进行多类图像分割的预处理
- android - 验证 POJO 数据类是否正确映射
- laravel - 如何在 PHPUnit 中控制台/检查 Laravel 资源的 JSON 响应?
- react-native - 如何找到包含透明背景视图的视图的背景颜色?
- java - Maven 编译错误 - 无法解析来自另一个本地项目的测试依赖项
- bash - 如何在一个 bash 脚本中以“无需用户手势”设置的信息亭模式打开两个 Chromium 网页
- java - 如何获取特定的数组值 Cloud Firestore
- javascript - 更改网站图标的代码不会出错,但不会更改书签(Jquery)
- docker - 启动容器进程导致: exec: "[\"/bin/sh -c\"": stat ["/bin/sh -c": no such file or directory