首页 > 解决方案 > 列中的 R 部分 gsub

问题描述

我有一个问题,我如何才能部分地为 df 的第一列 gsub。我可以删除冒号后的所有字符串,但我想将信息保留在以 19 开头的行中。

df$V1:

rs1231243:G:T:0
rs483294:C:T:5098723
19:4783234:T:G
rs19873423:A:C
19:83947355:C:T
kpg897324
rs3287492:G:C

Desired output:

rs1231243
rs483294
19:4783234:T:G
rs19873423
19:83947355:C:T
kpg897324
rs3287492

code:
df$V1 <- gsub("\\:.*","",df$V1)

我不知道如何有条件地 gsub 或其他方法来做到这一点。请指教。谢谢。

标签: rregexdataframegsub

解决方案


你可以使用否定。展望:

gsub("^(?!19)([^:]+).*", "\\1", df$V1, perl = T)

在 regex101.com 上查看演示


这产生了

df["V2"] <- gsub("^(?!19)([^:]+).*", "\\1", df$V1, perl = T)
df
                    V1              V2
1      rs1231243:G:T:0       rs1231243
2 rs483294:C:T:5098723        rs483294
3       19:4783234:T:G  19:4783234:T:G
4       rs19873423:A:C      rs19873423
5      19:83947355:C:T 19:83947355:C:T
6            kpg897324       kpg897324
7        rs3287492:G:C       rs3287492

推荐阅读