gpt4 book ai didi

r - 提取两个字母之间的字符串并在 R dplyr 中创建一个新列

转载 作者:行者123 更新时间:2023-12-05 03:17:33 30 4
gpt4 key购买 nike

我有一个看起来像这样的 data.frame

library(tidyverse)
df1 <- tibble(genes=c("AT1G02205","AT1G02160","AT5G02160", "ATCG02160"))
df1
#> # A tibble: 4 × 1
#> genes
#> <chr>
#> 1 AT1G02205
#> 2 AT1G02160
#> 3 AT5G02160
#> 4 ATCG02160

创建于 2022-10-19 reprex v2.0.2

我想提取字母 AT 之间的任何内容并创建一个新列,这样我的 new.df 看起来像

#>   genes         chr
#> <chr>
#> 1 AT1G02205 Chr1
#> 2 AT1G02160 Chr1
#> 3 AT5G02160 Chr5
#> 4 ATCG02160 ChrC

到目前为止,我找到了一种令人讨厌的方法来执行此操作,但我确信我可以做得更好。

``` r
library(tidyverse)
df1 <- tibble(genes=c("AT1G02205","AT1G02160","AT5G02160", "ATCG02160"))

new.df <- df1 |>
mutate(chr=str_extract(genes, "T(.*?)G")) |>
mutate(chr=str_replace_all(chr, c("T"="", "G"=""))) |>
mutate(chr=paste0("Chr",chr))
new.df
#> # A tibble: 4 × 2
#> genes chr
#> <chr> <chr>
#> 1 AT1G02205 Chr1
#> 2 AT1G02160 Chr1
#> 3 AT5G02160 Chr5
#> 4 ATCG02160 ChrC

创建于 2022-10-19 reprex v2.0.2

最佳答案

你可以使用str_match:

library(stringr)
library(dplyr)
df1 %>%
mutate(chr = str_c("Chr", str_match(genes, "T(.*)G")[, 2]))

# genes chr
# 1 AT1G02205 Chr1
# 2 AT1G02160 Chr1
# 3 AT5G02160 Chr5
# 4 ATCG02160 ChrC

或者在带有 gsub 的 base R 中:

df1 |>
transform(chr = paste0("Chr", gsub(".*T(.*)G.*", '\\1', genes)))

关于r - 提取两个字母之间的字符串并在 R dplyr 中创建一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74121896/

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