【问题标题】:How to populate a data frame based on condition in R如何根据R中的条件填充数据框
【发布时间】:2016-08-07 00:36:33
【问题描述】:

我创建了一个类似这样的空数据框

                 id Alyr Crub Lala Brap Bole Spar Esal Aara Thas
1 XLOC_003940_TBH_1   NA   NA   NA   NA   NA   NA   NA   NA   NA

我想看看id 和列名是否匹配,那么它应该用某个值替换“NA”。这是一个例子:

ex1 <- "Alyr_XLOC_003940_TBH_1_Ortholog_Known_Gene_Sense"

sp <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\1", ex1)
gene <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\2", ex1)
fun <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\3", ex1)

基于上面的例子,我想得到这样的东西

                 id        Alyr                  Crub Lala Brap Bole Spar Esal Aara Thas
1 XLOC_003940_TBH_1   Ortholog_Known_Gene_Sense   NF   NF   NF   NF   NF   NF   NF   NF

我被困在这里,不知道该怎么做?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    使用矩阵子集:

    df1$id <- gene
    df1[cbind(1:nrow(df1), match(sp, names(df1)))] <- fun
    

    Check this answer 了解有关通过两列矩阵对数据框进行子集化的更多信息。

    ##Example
    nms <- scan(what="character", text="id Alyr Crub Lala Brap Bole Spar Esal Aara Thas")
    df1 <- as.data.frame(matrix(NA, 3, 10))
    names(df1) <- nms
    df1
    #  id Alyr Crub Lala Brap Bole Spar Esal Aara Thas
    #1 NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
    #2 NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
    #3 NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
    
    
    ex1 <- c("Alyr_XLOC_003940_TBH_1_Ortholog_Gene",
             "Lala_XLOC_1234_TBH_1_Lalala_Gene",
             "Thas_XLOC_5678_TBH_1_Thasthas_Gene")
    
    sp <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\1", ex1)
    gene <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\2", ex1)
    fun <- sub("([A-Za-z]+)_(XLOC_\\d+_TBH_1)_([A-Za-z_]+)","\\3", ex1)
    
    df1$id <- gene
    df1[cbind(1:nrow(df1), match(sp, names(df1)))] <- fun
    df1
      #                  id          Alyr Crub        Lala Brap Bole Spar Esal Aara          Thas
      # 1 XLOC_003940_TBH_1 Ortholog_Gene   NA        <NA>   NA   NA   NA   NA   NA          <NA>
      # 2   XLOC_1234_TBH_1          <NA>   NA Lalala_Gene   NA   NA   NA   NA   NA          <NA>
      # 3   XLOC_5678_TBH_1          <NA>   NA        <NA>   NA   NA   NA   NA   NA Thasthas_Gene
    

    【讨论】:

    • 感谢它的工作。我刚刚添加了这个df1[is.na(df1)] &lt;- "Not found"
    猜你喜欢
    • 2021-11-19
    • 2021-07-25
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多