我正在努力寻找以下问题的答案。
\n我想通过向量搜索 data.frame 中的列。找到匹配项后,我希望利用“搜索向量”的元素来创建新列的新元素。请参阅下面的可重现示例。
\ncolour <- c('red', 'yellow')\n\na <- c('violet', 'red', 'taupe', 'blue', 'yellow_a', 'yellow_b', 'blue_a', 'red_c')\nb <- c('non', 'prim', 'non', 'prim', 'prim', 'prim', 'prim', 'prim')\nc <- c(1, 2, 3, 4, 5, 6, 7, 8)\n\ndf <- data.frame(a, b, c)\n
Run Code Online (Sandbox Code Playgroud)\n我尝试过以下方法:
\ndf_clean <- df %>% mutate(d = if_else(str_detect(a, colour), colour, NA_character_))\n
Run Code Online (Sandbox Code Playgroud)\n输出:
\n问题:查看帮助文件,我无法从“if_else”输出大于 1 的值,我收到以下信息:
\n\n\n错误:
\nmutate()
列有问题d
。\xe2\x84\xb9d = if_else(rep(str_detect(a, colour), length(colour)), colour, NA_character_)
。x 的true
长度必须为 16( 的长度condition
)或\n,而不是 2。
我希望实现:
\na <- c('violet', 'red', 'taupe', 'blue', 'yellow_a', 'yellow_b', 'blue_a', 'red_c')\nb <- c('non', 'prim', 'non', 'prim', 'prim', 'prim', 'prim', 'prim')\nc <- c(1, 2, 3, 4, 5, 6, 7, 8)\nd <- c(NA_character_, 'red', NA_character_, NA_character_, 'yellow', 'yellow', NA_character_, 'red')\n\ndf_clean <- data.frame(a, b, c, d)\n
Run Code Online (Sandbox Code Playgroud)\n要求:
\n如果您能帮助我解决此问题或找到替代解决方案,我将不胜感激,我无法弥补这一差距。我错过了一些可能显而易见的东西?
\n任何帮助将不胜感激!
\n非常感谢
\nstr_extract
包装中的潜在解决方案stringr
。
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))
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
50 次 |
最近记录: |