gpt4 book ai didi

r - 将 dplyr::across 与两组变量一起使用

转载 作者:行者123 更新时间:2023-12-03 23:58:34 25 4
gpt4 key购买 nike

我有两组变量,例如变量 a和变量 a_avail .我正在尝试更改 a 的值基于 a_avail 的值我想知道这是否可以使用 across 来完成与 glue .
这是我尝试过的。没有产生错误,但胶水似乎没有拾取 .x_avail 的值因为所有返回的值都是 NA:

library(tidyverse)

df <- tibble(a = c(0, 1, 0, 0, 0),
a_avail = c(1, 1, 1, 0, 0),
b = c(1, 1, 1, 0, 0),
b_avail = c(1, 0, 0, 1, 0))

df2 <- df %>%
mutate(across(.cols = c(a, b),
.fns = ~case_when(
glue::glue("{.x}_avail") == 1 ~ .x,
glue::glue("{.x}_avail") == 0 ~ as.numeric(NA)
),
.names = "{.col}_new"))

df2
#> # A tibble: 5 x 6
#> a a_avail b b_avail a_new b_new
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0 1 1 1 NA NA
#> 2 1 1 1 0 NA NA
#> 3 0 1 1 0 NA NA
#> 4 0 0 0 1 NA NA
#> 5 0 0 0 0 NA NA
创建于 2021-02-12 由 reprex package (v0.3.0)

最佳答案

不是 tidyverse 解决方案,但这应该有效

library(tidyverse)

df <- tibble(a = c(0, 1, 0, 0, 0),
a_avail = c(1, 1, 1, 0, 0),
b = c(1, 1, 1, 0, 0),
b_avail = c(1, 0, 0, 1, 0))


v1 <- list('a','b')
v2 <- list('a_avail','b_avail')


v3 <- as.data.frame(mapply(function(x,y){ifelse(df[[y]] == 0, NA,df[[x]])} , v1,v2,
SIMPLIFY = TRUE))

names(v3) <- paste0(v1,"_new")

df3 <- cbind(df, v3)

关于r - 将 dplyr::across 与两组变量一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66174874/

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