gpt4 book ai didi

r - 如何在R中字符串中的某个位置后添加双引号

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

我有一个 data.table,其中包含许多行,在 R 中如下所示:

    V1        V2       V3    V4   V5  V6  V7  V8   V9           V10
NCBINCC GenBank gene 331 1008 . - . gene_id=UL1 protein_id=ABV71500.1
NCBINCC GenBank gene 1009 1120 . - . gene_id=UL4 protein_id=ABV71520
NCBINCC GenBank gene 1135 1200 . - . gene_id=UL6 protein_id=ABV71525

是否有一种简单的方法可以在字符串之间(在字符串gene_id=和 Protein_id=之后)添加引号,以便它们仅包含不同的基因和蛋白质,如以下输出:

    V1        V2       V3    V4   V5  V6  V7  V8   V9            V10
NCBINCC GenBank gene 331 1008 . - . gene_id="UL1" protein_id="ABV71500.1"
NCBINCC GenBank gene 1009 1120 . - . gene_id="UL4" protein_id="ABV71520"
NCBINCC GenBank gene 1135 1200 . - . gene_id="UL6" protein_id="ABV71525"

我见过this answer对于 shell,但想知道是否有办法在 R 中也能做到这一点。谢谢您。

最佳答案

我们可以将 str_replace 与正则表达式查找一起使用来匹配 =,捕获包括 . 在内的字母数字字符并替换为反向引用( \\1) 引用

library(stringr)
library(dplyr)
df1 <- df1 %>%
mutate(across(c(V9, V10),
~ str_replace(., "(?<=\\=)([[:alnum:].]+)", '"\\1"')))

-输出

df1
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1 NCBINCC GenBank gene 331 1008 . - . gene_id="UL1" protein_id="ABV71500.1"
#2 NCBINCC GenBank gene 1009 1120 . - . gene_id="UL4" protein_id="ABV71520"
#3 NCBINCC GenBank gene 1135 1200 . - . gene_id="UL6" protein_id="ABV71525"

忘记使用base R使用相应的选项

nm1 <- c("V9", "V10")
df1[nm1] <- lapply(df1[nm1], function(x)
sub("(?<=\\=)([[:alnum:].]+)", '"\\1"', x, perl = TRUE))

数据

df1 <- structure(list(V1 = c("NCBINCC", "NCBINCC", "NCBINCC"), V2 = c("GenBank", 
"GenBank", "GenBank"), V3 = c("gene", "gene", "gene"), V4 = c(331L,
1009L, 1135L), V5 = c(1008L, 1120L, 1200L), V6 = c(".", ".",
"."), V7 = c("-", "-", "-"), V8 = c(".", ".", "."), V9 = c("gene_id=UL1",
"gene_id=UL4", "gene_id=UL6"), V10 = c("protein_id=ABV71500.1",
"protein_id=ABV71520", "protein_id=ABV71525")), class = "data.frame",
row.names = c(NA,
-3L))

关于r - 如何在R中字符串中的某个位置后添加双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67182156/

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