r - 引用 dplyr 的 cross() 中的列名
问题描述
是否可以在内部的 lambda 函数中引用列名across()
?
df <- tibble(age = c(12, 45), sex = c('f', 'f'))
allowed_values <- list(age = 18:100, sex = c("f", "m"))
df %>%
mutate(across(c(age, sex),
c(valid = ~ .x %in% allowed_values[[COLNAME]])))
我刚刚遇到了这个问题,其中 OP 询问基于允许值列表验证数据框中的列。
dplyr
刚刚获得across()
,这似乎是一个自然的选择,但我们需要列名来查找允许的值。
我能想到的最好的方法是调用imap_dfr
,但是集成到分析管道中更加麻烦,因为需要将结果与原始数据帧重新组合。
解决方案
答案是肯定的,可以参考dplyr
's中的列名across
。你需要使用cur_column()
. 你原来的答案是如此接近!cur_column()
在您想要列名的位置插入您的解决方案:
library(tidyverse)
df <- tibble(age = c(12, 45), sex = c('f', 'f'))
allowed_values <- list(age = 18:100, sex = c("f", "m"))
df %>%
mutate(across(c(age, sex),
c(valid = ~ .x %in% allowed_values[[cur_column()]])
)
)
参考:https ://dplyr.tidyverse.org/articles/colwise.html#current-column
推荐阅读
- c# - 实体框架 6 中的更新数据库命令不起作用
- javascript - JavaScript 生成器及其原型链
- android - ViewModel 正在为 recyclerview 复制项目
- mysql - 按客户选择,他最近的订单中最贵的产品名称
- reactjs - 使用 React 重定向到另一条路线
- postgresql - 无法找到或构造 Param[shapeless.::[String,shapeless.::[io.circe.Json,shapeless.HNil]]]
- oracle - PL/SQL 语句被忽略
- excel - VBA Excel在多行中水平对齐图片
- typescript - 如何在 `UploadedFile | 上进行模式匹配 上传文件[]`
- javascript - 将访问令牌与 Reactjs 前端一起使用