我正在寻找一种动态的方法来指定一些“条件参数”,然后在操作时将其输入到一个case_(或者其他更适合该问题的方法)。
因此,我的目标是在调用时将条件的规范与case_分开,例如,用户可以在txt文件或R中的列表中键入条件,然后我会在调用时将该信息提供给case_(或任何其他函数,如果更合适的话)。
因此,假设下面的数据是我想要创建一个额外的变量来重新编码
x
,我可以这样做:
df <- data.frame(x = 1:10)
df |>
mutate(x2 = case_when(x < 4 ~ 1,
x >= 4 & x <=7 ~ 2,
TRUE ~ 3))
现在,我想要实现的是,让这段代码更加灵活,我可以在外部指定case_when条件,然后重新编码。
例如,它可能看起来像:
all_conditions <- list(1 = "x < 2",
2 = "x >= 2 & x < 5",
3 = "x >= 5 & x < 9",
4 = "TRUE")
然后我可以做一些:
df |>
mutate(x2 = do(case_when, all_conditions))
编辑:虽然示例显示了@Mael解决方案适用的数值类型变量,但该解决方案也适用于条件可能类似于“x==”abc“| x==”def”的字符变量。
下面是一个基于rlang
的可能解决方案。
解释
>
首先,当时,我们需要使用列表all_条件
为case_创建一个包含整个代码的字符串,这就是我的
imap
所做的。
其次,使用
rlang::parse_quo
,我们将字符串转换为Mutate
中使用的表达式。
评论
list
all_conditions
元素的名称必须用反括号括起来。
library(tidyverse)
library(rlang)
df <- data.frame(x = 1:10)
all_conditions <- list(`1` = "x < 2",
`2` = "x >= 2 & x < 5",
`3` = "x >= 5 & x < 9",
`4` = "TRUE")
code <- imap(all_conditions, ~ str_c(.x, " ~ ", .y)) %>%
str_c(collapse = ", ") %>% str_c("case_when(",.,")")
df %>%
mutate(x2 = !!parse_quo(code, env = caller_env()))
#> x x2
#> 1 1 1
#> 2 2 2
#> 3 3 2
#> 4 4 2
#> 5 5 3
#> 6 6 3
#> 7 7 3
#> 8 8 3
#> 9 9 4
#> 10 10 4
我想创建一个双变量映射,绘制两个变量:和。为了给部分数据提供正确的颜色,我想为一个变量添加一列颜色代码和另一个变量。然后再将两者连接起来。这样就可以像下面的示例那样对数据进行编码: 下面是我的示例df和失败代码: 有了这些结果...: 我是新的与mutate的结合,希望有人能帮助我。
我有点卡住了。这个问题很接近我需要的,但不完全是: [Products_Final]是订单id上带有订单表的联接表 订单表是 诸如此类 所以如果我这样做了 我想要的是基于不同水果和国家组合的的总数,因为Product_id2看起来可能是重复的顺序。 如果我做了区分,总和似乎不起作用。 我如何把这两件事结合在一起?下面的我也试过了但是接不上
大家好,我试着做一个方法来应用条件一个SelectQuery,但我不知道如何通过名称获得字段或通过名称获得表,代码示例... 但字段总是空的... 我怎么解决这个。
数据文件:-已编辑- 我正在使用ANES 2016时间序列研究数据。使用以下代码和类别对缺失数据进行编码,以表明其缺失的原因: -1.不适用 -2.在单独文件或编码版本中提供的文本响应将包含在未来版本中 3.受限 4.错误 5.中断,足够的部分信息 6.没有选举后采访 7.没有帖子数据,由于信息不完整而删除 8.不知道 9.拒绝 我想在我的数据中使用case_when和Tidyverse对面的NA
我有数据。看起来像这样的框架 首先,我想根据Day aka group_by(Day)对数据帧进行分组。当在每个组中,每种类型(tr1,tr2)的和(平均sd)大于控制(ctrl)的差(平均sd),然后我想在新列(new.col)中指定值~是,如果不是,我想指定值~否。 例如,我希望我的数据看起来像这样。它不一定要看起来像这样
我有一个多列的数据表。这些列中的一列当前作为“键”工作(例如< code>keyb)。另一列(假设< code>A)中可能有数据,也可能没有数据。我想提供一个向量,每个键随机采样两行,-如果这个键出现在向量中,其中一行包含< code>A中的数据,而另一行不包含。 MRE: 例如,我可以将<code>数据子集。表基于<code>list_try 我最初的想法(也可能是低效的想法)是尝试链接每个键两