首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用命名列表为case_when生成案例

使用命名列表为case_when生成案例
EN

Stack Overflow用户
提问于 2021-03-06 00:51:33
回答 1查看 146关注 0票数 1

我试图弄清楚如何对存储在列表中的组使用case_when,因此修改列表将修改case_when的结果。

下面是一个玩具测试用例:

代码语言:javascript
复制
library(tidyverse)
info <- tibble(target = letters[seq(1, 10)])

groups <- list("A" = letters[seq(1, 10, by = 3)],
     "B" = letters[seq(2, 10, by = 3)],
     "C" = letters[seq(3, 10, by = 3)])

info %>% mutate(case_when(
  target %in% groups$A ~ names(groups)[1],
  target %in% groups$B ~ names(groups)[2],
  target %in% groups$C ~ names(groups)[3]
))

这提供了我想要的输出,但我希望从列表中动态生成case_when中的选项。我想应该是这样的:

代码语言:javascript
复制
generate_cases <- function(x, i) {
  ### I have no idea what to do here...
}


cases <- groups %>% imap(generate_cases)

info %>% mutate(case_when(!!! cases))

我怀疑有什么东西是使用了it ()和rlang::expr(),但我真的不知道如何将它串在一起。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-06 01:50:56

这里有一种使用purrr::imap函数的方法

代码语言:javascript
复制
cases <- imap(groups, ~quo(target %in% !!.x ~ !!.y))

info %>% mutate(case_when(
  !!!cases
))

一个更好的选择可能是将您的组重组到一个适当的查找表中,这样您就可以进行有效的左联接。一种方法是

代码语言:javascript
复制
info %>% 
   left_join(stack(groups), by=c("target"="values"))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66501328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档