【问题标题】:Filter function with variable name in R/dplyr [duplicate]R / dplyr中具有变量名称的过滤函数[重复]
【发布时间】:2021-07-21 21:09:27
【问题描述】:

我想从我的数据集中过滤特定的行,并且我想定义在过滤器函数之前的行,但是每当我这样做时,我都会得到 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 &lt;- 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(最后 2 行)并再次调用它时遇到问题。

【问题讨论】:

标签: r dplyr


【解决方案1】:

这可能是一个骗子(我在评论中提供的链接),但对于你的情况:

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

【讨论】:

  • 那不行,也许我定义的名字和基因错了?我写了name &lt;- sym("some_name"),当我写df2 &lt;- df1 %&gt;% group_by(DNA, ID) %&gt;% filter(any(DNA == "some_name" &amp; ID == "some_gene"))时代码确实有效
  • 您不需要在这里使用sym(.),只需使用您开始提问时的变量即可。
  • 这仍然不起作用,我现在有示例数据,所以我将把它添加到上面的问题中。顺便感谢您的帮助!
  • 你能看一下这段代码吗:set.seed(42) n &lt;- 6 dat &lt;- 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 &lt;- "type 1" filtered_dat &lt;- dat %&gt;% group_by(id, type) %&gt;% filter(type == "my_type") 因为现在我根本不使用&amp;&amp;&amp;,它仍然不起作用。
  • 成功了,我使用了&amp;。错误是使用name,而那已经是列名。谢谢你教我更多关于向量和运算符的知识! :)
猜你喜欢
  • 2018-09-22
  • 2022-01-13
  • 2019-08-08
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多