gpt4 book ai didi

根据具有数据帧作为输入的另一列替换列的值

转载 作者:行者123 更新时间:2023-12-05 09:34:47 26 4
gpt4 key购买 nike

使用 base::replace 函数,我想根据 y 列的值更改列 z 的某些值

>
library(tidyverse)

(df <- tibble(y = 10:13, z = 20:23))
#> # A tibble: 4 x 2
#> y z
#> <int> <int>
#> 1 10 20
#> 2 11 21
#> 3 12 22
#> 4 13 23

我有 data.frame val ,其中列 a 是用作条件的值,列 b 将是替换值。

(val <- tibble(a = c(10, 12), b = c(100, 200)))
#> # A tibble: 2 x 2
#> a b
#> <dbl> <dbl>
#> 1 10 100
#> 2 12 200

使用以下方法可以获得所需的结果,但只有当 val 内的所有值都在 df 内时才有效

df %>% mutate(z = replace(z, y %in% val$a, val$b))
#> # A tibble: 4 x 2
#> y z
#> <int> <dbl>
#> 1 10 100
#> 2 11 21
#> 3 12 200
#> 4 13 23

例如,如果我更新 val 使其具有 df的值,则:

(val <- tibble(a = c(1, 10, 12), b = c(1, 100, 200)))
#> # A tibble: 3 x 2
#> a b
#> <dbl> <dbl>
#> 1 1 1
#> 2 10 100
#> 3 12 200

然后我再次运行代码...

df %>% mutate(z = replace(z, y %in% val$a, val$b))
#> Warning in x[list] <- values: number of items to replace is not a multiple of
#> replacement length
#> # A tibble: 4 x 2
#> y z
#> <int> <dbl>
#> 1 10 1
#> 2 11 21
#> 3 12 100
#> 4 13 23

有错误...我该如何解决这个问题?

reprex package 于 2021 年 2 月 19 日创建(v1.0.0)

最佳答案

一种可能性可能是:

df %>%
mutate(z = coalesce(b[match(y, a)], z))

y z
<int> <dbl>
1 10 100
2 11 200
3 12 22

关于根据具有数据帧作为输入的另一列替换列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66269766/

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