gpt4 book ai didi

r - if_else 或替代的向量输出

转载 作者:行者123 更新时间:2023-12-02 18:24:59 25 4
gpt4 key购买 nike

我正在努力寻找以下问题的答案。

我想通过向量搜索 data.frame 中的列。找到匹配项后,我希望利用“搜索向量”的元素来创建新列的新元素。请参阅下面的可重现示例。

colour <- c('red', 'yellow')

a <- c('violet', 'red', 'taupe', 'blue', 'yellow_a', 'yellow_b', 'blue_a', 'red_c')
b <- c('non', 'prim', 'non', 'prim', 'prim', 'prim', 'prim', 'prim')
c <- c(1, 2, 3, 4, 5, 6, 7, 8)

df <- data.frame(a, b, c)

我尝试过以下方法:

df_clean <- df %>% mutate(d = if_else(str_detect(a, colour), colour, NA_character_))

输出:

问题:查看帮助文件时,我无法从“if_else”输出大于 1 的值,我收到以下信息:

Error: Problem with mutate() column d. ℹ d = if_else(rep(str_detect(a, colour), length(colour)), colour, NA_character_). x true must be length 16 (length of condition) orone, not 2.

我希望实现:

a <- c('violet', 'red', 'taupe', 'blue', 'yellow_a', 'yellow_b', 'blue_a', 'red_c')
b <- c('non', 'prim', 'non', 'prim', 'prim', 'prim', 'prim', 'prim')
c <- c(1, 2, 3, 4, 5, 6, 7, 8)
d <- c(NA_character_, 'red', NA_character_, NA_character_, 'yellow', 'yellow', NA_character_, 'red')

df_clean <- data.frame(a, b, c, d)

要求:

如果您能帮助我解决此问题或找到替代解决方案,我将不胜感激,但我无法弥补这一差距。我遗漏了一些可能显而易见的东西?

任何帮助将不胜感激!

非常感谢

最佳答案

使用 stringr 包中的 str_extract 的潜在解决方案。

colour <- c('red', 'yellow')

a <- c('violet', 'red', 'taupe', 'blue', 'yellow_a', 'yellow_b', 'blue_a', 'red_c')
b <- c('non', 'prim', 'non', 'prim', 'prim', 'prim', 'prim', 'prim')
c <- c(1, 2, 3, 4, 5, 6, 7, 8)

df <- data.frame(a, b, c)


colour_str <- paste(colour, collapse='|')

df |>
mutate(d = str_extract(a, colour_str))

输出:

         a    b c      d
1 violet non 1 <NA>
2 red prim 2 red
3 taupe non 3 <NA>
4 blue prim 4 <NA>
5 yellow_a prim 5 yellow
6 yellow_b prim 6 yellow
7 blue_a prim 7 <NA>
8 red_c prim 8 red

关于r - if_else 或替代的向量输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70351510/

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