2016-05-27 10 views
3

Ich habe eine Spalte in Dataframe (df) für die ich Wert anhängen möchte (nicht konstant, sondern Variable). Ein Beispiel wird es klarer machen:Wert in df Zeilen anhängen

> 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 

I Zeichen „ENSG“ angehängt werden soll und mehrere „000“, so dass die Gesamtlänge des jeweiligen Wertes 15 sein (einschließlich ENSG). Zum Beispiel sollte die Ausgabe sein:

  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 
+0

Siehe auch "sprintf"; 'sprintf (" ENSG% 011d ", df $ genID)' –

Antwort

5

Mit str_pad von 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 
2

Die stri_pad_left Funktion im stringi Paket wird tun, was Sie wollen:

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

Grundfunktion verwenden:

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

"15" Gesamtlänge der Variablen;

1

Oder Sie tun können (Basis R Funktionen):

# 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 
0

ich mit Sotos Beispiel gehen würde (es war das, was ich dachte sofort, wenn der Lektüre Ihrer Post), str_pad Befehl

Verwandte Themen