gpt4 book ai didi

在dplyrcross()中引用列名

转载 作者:行者123 更新时间:2023-12-03 16:17:46 25 4
gpt4 key购买 nike

是否可以在across()内的lambda函数中引用列名?

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]])))

我刚遇到 this question,其中OP询问有关基于允许值列表验证数据框中的列的信息。
dplyr刚刚获得了 across(),这似乎是很自然的选择,但是我们需要列名称来查找允许的值。

The best I could come up with是对 imap_dfr的调用,但是将其集成到分析管道中比较麻烦,因为需要将结果与原始数据帧重新组合。

最佳答案

我认为您此时可能对across的要求过多(但这可能会刺激额外的开发,因此也许有一天它会按照您的建议进行工作)。

我认为purrr包中的imap函数可能会为您提供所需的信息:

> df <- tibble(age = c(12, 45), sex = c('f', 'f'))
> allowed_values <- list(age = 18:100, sex = c("f", "m"))
>
> df %>% imap( ~ .x %in% allowed_values[[.y]])
$age
[1] FALSE TRUE

$sex
[1] TRUE TRUE

> df %>% imap_dfc( ~ .x %in% allowed_values[[.y]])
# A tibble: 2 x 2
age sex
<lgl> <lgl>
1 FALSE TRUE
2 TRUE TRUE

如果您想要具有合并有效性的单列,则可以通过 reduce传递结果:
> df %>% imap( ~ .x %in% allowed_values[[.y]]) %>%
+ reduce(`&`)
[1] FALSE TRUE

然后可以将其作为新列添加到原始数据,或仅用于子集数据。我对tidyverse不够专业,但还不知道是否可以将其与 mutate组合以直接添加列。

关于在dplyrcross()中引用列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62155957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com