列中的R部分gsub

列中的R部分gsub,r,regex,dataframe,gsub,R,Regex,Dataframe,Gsub,我有一个问题,关于如何为df的第1列进行部分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:

我有一个问题,关于如何为df的第1列进行部分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)
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
期望输出:
rs1231243
rs483294
19:4783234:T:G
rs19873423
19:83947355:C:T
kpg897324
rs3287492
代码:

df$V1您可以使用neg。展望:

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

这就意味着

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

df[“V2”]由于要基于向量的每个值进行条件调整,因此可以使用ifelse函数

ifelse(test, yes, no)
参数

测试-可以强制为逻辑模式的对象

是-返回测试的真实元素的值

否-返回测试的假元素的值

下面的代码应该是

df$V1 <- ifelse(grepl("^19",df$V1), # Test
                df$V1, # yes
                gsub("\\:.*","",df$V1)) # No
df$V1