【发布时间】:2022-01-26 18:18:39
【问题描述】:
我正在尝试用超过相应限制变量的值来计算数据框的列。这是similar problem,但对于每个点,条件可能会发生变化,因此rowSums 不是一个选项。我对以下尝试的解决方案的修改、更有效的方法以及有助于解决此问题的任何更简单的方法感兴趣。
library(tidyverse)
set.seed(234)
ex_dat <- tibble(a = rnorm(n = 6, mean = 1),
a_lim = 0.75,
b = rnorm(n = 6, mean = 0.5),
b_lim = 0.333,
c = rnorm(n = 6, mean = 1.5),
c_lim = 1.0,
d = rnorm(n = 6, mean = 1.5),
d_lim = 1.25)
ex_dat %>%
rowwise() %>%
mutate(tally = sum(map_lgl(.x = c("a","b","c","d"),
.f = ~(noquote(.x) > noquote(paste0(.x,"_lim")))), na.rm = T))
例如,如果满足所有 4 个条件,则期望的结果是此处的“计数”列在第一行中显示 4。然后,它应该读取第二行的 2,因为只超出了 2 个限制。
我在这里尝试了这种方法的一些变体,使用 bang-bang 运算符强制评估 map 函数的 .f 参数中的变量。到目前为止,就我能想到的而言,这种尝试和无声的失败似乎是最接近和最明智的。显然,我对非标准评估没有非常牢靠的把握,所以我对!! 和sym() 的尝试并没有让我走得太远。
同样,如果有人看到我以迂回或低效的方式解决这个问题,我会欢迎重定向。谢谢。
【问题讨论】:
标签: r dplyr quotes rlang non-standard-evaluation