2017-11-15 3 views
0

Ich habe die folgende Liste c(1.23,1,0.9), die in der Konsole [1] 1.23 1 0.9 zeigt, möchte ich es zu transformieren: [1] 1.23,1.,.9. Wie Sie sehen können, bleibt die erste Nummer gleich, aber 1 wird zu 1. und 0.9 zu .9.Fügen Sie einen Punkt nach einer Nummer in R

Gibt es eine elegante Möglichkeit, dieses Format zu haben?

Grüße

Antwort

5

Dies ist eine Frage des Druckens oder Darstellungen.

Was möchten Sie vielleicht tun, ist es als ein Zeichen zu verwandeln:

res <- as.character(c(1.23,1,0.9)) 

Und dann regexp verwenden:

res <- gsub("^0", "", res) # delete leading 0s 
res[!grepl("\\.", res)] <- paste0(res[!grepl("\\.", res)], ".") # Add a "." at the end where there are no 0s 

Und das Ergebnis ist:

res 
[1] "1.23" "1." ".9" 
+0

Er könnte eine S3-Klasse erstellen und diesen Ansatz für eine Druckmethode verwenden. Er könnte dann 'quote = FALSE 'innerhalb von' print.default' setzen und dadurch die Anführungszeichen vermeiden. – Roland

0

Hier eine Methode mit sprintf und gsub:

gsub("0", "", sprintf("%.2f", x)) 
[1] "1.23" "1." ".9" 

Zum Hinzufügen der Kommas können Sie dies in eine paste Funktion einfügen.

paste(gsub("0", "", sprintf("%.2f", x)), collapse=",") 
[1] "1.23,1.,.9" 
Verwandte Themen