r - 在 R/dplyr 中使用变量名过滤函数
问题描述
我想从我的数据集中过滤特定行,并且我想定义过滤器函数之前的哪一行,但是每当我这样做时,我都会得到 0 个观察值。
我想这样做(这不起作用,因为我得到 0 个观察结果):
name <- "my_dna_42_x"
gene <- "my_gene_12213"
df2 <- df1 %>% group_by(DNA, ID) %>% filter(any(DNA == name && ID == gene))
但这确实有效(但我不希望这样做,因为我希望能够在运行之前定义名称和基因(并稍后将其变为函数)):
df2 <- df1 %>% group_by(DNA, ID) %>% filter(any(DNA == "my_dna_42_x" && ID == "my_gene_12213"))
那么如何让过滤器函数在更早定义名称时接受名称或 ID?
(我也尝试过parse_expr(paste(name))
,但效果不佳,我将名称定义为符号,然后像这样name <- sym("my_dna_42_x")
:)
已解决:名称已经是列名
带有示例数据的问题:
set.seed(42)
n <- 6
dat <- data.frame(id=1:n,
date=seq.Date(as.Date("2020-12-26"), as.Date("2020-12-31"), "day"),
group=rep(LETTERS[1:2], n/2),
age=sample(18:30, n, replace=TRUE),
type=factor(paste("type", 1:n)),
x=rnorm(n))
my_type <- "type 1"
filtered_dat <- dat %>% group_by(id, type) %>% filter(type == "my_type")
我在定义 my_type (最后两行)并再次调用它时遇到问题。
解决方案
这可能是一个骗局(我在评论中提供的链接),但对于您的情况:
name <- "my_dna_42_x"
gene <- "my_gene_12213"
df2 <- df1 %>%
group_by(DNA, ID) %>%
filter(any(DNA == name & ID == gene))
### ^--- single '&'
查看两者之间的区别
c(TRUE, TRUE) && c(TRUE, FALSE)
# [1] TRUE
c(TRUE, TRUE) & c(TRUE, FALSE)
# [1] TRUE FALSE
推荐阅读
- python - 如何使用键输入安全地停止 Python 线程
- r - 在R中按组计算平均年龄
- python - 在python中将像素渲染到屏幕的最佳方法?
- javascript - 该系统找不到指定的路径。内部/模块/cjs/loader.js:834
- rust - iter().min_by() 上的闭包签名中的生命周期问题
- javascript - 为什么我在从 .net 核心控制器调用 ajax 数据表 api 时不断收到 400 错误?
- gradle - 如何在 gradle 的配置中使用当前版本
- html - 你能把跨度放在css的中心吗?
- php - 您如何访问公共 Spamhaus DBL 服务?
- html - 如何使 div 元素显示为与列的 flex 方向内联?