【问题标题】:R partial gsub in a column列中的 R 部分 gsub
【发布时间】:2018-10-28 10:43:00
【问题描述】:

我有一个问题,我如何才能部分地为 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 或其他方法来做到这一点。请指教。谢谢。

【问题讨论】:

    标签: r regex dataframe gsub


    【解决方案1】:

    你可以使用否定。前瞻:

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

    a demo on 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
    

    【讨论】:

      【解决方案2】:

      由于您想根据向量的每个值进行条件处理,您可以使用 ifelse 函数

      ifelse(test, yes, no)
      

      参数

      test - 可以强制转换为逻辑模式的对象。

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

      no - 返回测试的错误元素的值。

      下面的代码应该

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 1970-01-01
        相关资源
        最近更新 更多