【问题标题】:Append value in df rows在 df 行中附加值
【发布时间】:2016-09-25 20:20:53
【问题描述】:

我在数据框 (df) 中有一个列,我想为其附加值(不是常量,而是变量)。一个例子会更清楚:

> df
     geneID Sample.290
1         1  0.4018499
2        10  0.2694255
3       100  1.4441846
4      1000 13.7652753
5     10000  2.1552100
6 100008586  0.2358481

我想附加字符“ENSG”和多个“000”,以便每个值的总长度为 15(包括 ENSG)。例如输出应该是:

         geneID           Sample.290
1        ENSG00000000001  0.4018499
2        ENSG00000000010  0.2694255
3        ENSG00000000100  1.4441846
4        ENSG00000001000 13.7652753
5        ENSG00000010000  2.1552100
6        ENSG00100008586  0.2358481

【问题讨论】:

  • 另见?sprintfsprintf("ENSG%011d", df$geneID)

标签: r dataframe append


【解决方案1】:

使用来自stringrstr_pad

library(stringr)
df$geneID <- paste0('ENSG', str_pad(df$geneID, width = 11, pad = '0'))
df
#           geneID Sample.290
#1 ENSG00000000001  0.4018499
#2 ENSG00000000010  0.2694255
#3 ENSG00000000100  1.4441846
#4 ENSG00000001000 13.7652753
#5 ENSG00000010000  2.1552100
#6 ENSG00100008586  0.2358481

【讨论】:

    【解决方案2】:

    使用基本功能:

    df$geneID <- sapply(df$geneID,function(x) paste("ENSG",
                        paste(rep(0,(15-nchar(x)-nchar("ENSG"))),collapse = ""),x,sep=""))
    

    “15”个变量的总长度;

    【讨论】:

      【解决方案3】:

      stringi 包中的 stri_pad_left 函数可以满足您的需求:

      df$geneID <- paste0('ENSG', stringi::stri_pad_left(df[, 'geneID'], width = 11, pad = '0'))
      

      【讨论】:

        【解决方案4】:

        或者你可以这样做(使用基本 R 函数):

        # df
             # geneID Sample.290
        # 1         1  0.4018499
        # 2        10  0.2694255
        # 3       100  1.4441846
        # 4      1000 13.7652753
        # 5     10000  2.1552100
        # 6 100008586  0.2358481
        
        a="ENSG00000000000"
        df[,'geneID']=sapply(1:nrow(df), function(i) 
        paste0(substring(a, 1, 15-nchar(df[i,'geneID'])), df[i,'geneID']))
        
        # > df
                   # geneID Sample.290
        # 1 ENSG00000000001  0.4018499
        # 2 ENSG00000000010  0.2694255
        # 3 ENSG00000000100  1.4441846
        # 4 ENSG00000001000 13.7652753
        # 5 ENSG00000010000  2.1552100
        # 6 ENSG00100008586  0.2358481
        

        【讨论】:

          【解决方案5】:

          我会使用 Sotos 示例(这是我在阅读您的帖子时立即想到的),str_pad 命令

          【讨论】:

            猜你喜欢
            • 2023-02-14
            • 2021-07-11
            • 2020-12-16
            • 2021-04-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-07
            相关资源
            最近更新 更多