R 在df行中追加值

R 在df行中追加值,r,dataframe,append,R,Dataframe,Append,我在dataframe(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”,这样每个值

我在dataframe(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

stringi
程序包中的
stri\u pad\u left
功能将执行您想要的操作:

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

df$geneID使用
stru-pad
from
stringr

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
库(stringr)

df$geneID使用基本函数:

df$geneID <- sapply(df$geneID,function(x) paste("ENSG",
                    paste(rep(0,(15-nchar(x)-nchar("ENSG"))),collapse = ""),x,sep=""))
df$geneID或者您可以这样做(使用基本R函数):


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

另请参见,
?sprintf
<代码>sprintf(“ENSG%011d”,df$geneID)
# 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