Come è possibile modificare concisamente una variabile R numerica (mantenendola numerica) in modo che, ad esempio, "-0,34" diventi semplicemente "-.34"?Come rimuovere il primo "0." in una variabile R numerica
risposta
Solo quando si emette un valore numerico è necessario scegliere una rappresentazione concreta (ad esempio, come deve essere formattato il numero). Non è possibile modificare una variabile numerica da "-0.34" a "-.34"; entrambe sono rappresentazioni per lo stesso numero.
Tuttavia, quando si emette un'espressione e
, è possibile scegliere come deve essere formattato. Io non conosco alcun modo build-in per lasciare fuori la porta "0", ma si può sempre e solo rimuoverlo manualmente:
> sub("^(-?)0.", "\\1.", sprintf("%.2f", -0.34))
[1] "-.34"
È possibile definire una funzione per comodità, ad esempio,
numformat <- function(val) { sub("^(-?)0.", "\\1.", sprintf("%.2f", val)) }
Oltre alla bella risposta @ di Stefan, mi sono imbattuto il seguente codice, che compie la stessa cosa ma stampa di più cifre decimali:
f = function(X1)gsub("0\\.","\\.", X1)
È necessario fare attenzione a sostituire semplicemente "0". con ".", poiché questo cambierà "10.12" in "1.12", che presumibilmente non è inteso. Ho risolto questo problema usando l'espressione regolare '"^(-?) 0. "'. Questo corrisponde solo se lo zero è il primo carattere (tranne forse un '-'). – stefan
Grazie per il suggerimento, Stefan. @Manoel Galdino - per me la variabile rimane numerica dopo aver usato la funzione di Stefan. – rolando2
Oltre alle risposte esistenti, ho voluto ricordare che il il pacchetto weights
ha una funzione rd()
che può essere utilizzata per "arrotondare i numeri al testo senza zero iniziale". Ovviamente, il risultato non è numerico ma carattere.
library("weights")
rd(-0.341, digits=2)
[1] "-.34"
Avevo bisogno di mostrare i numeri a 3 posizioni decimali. Se si desidera stampare un numero arbitrario di posizioni decimali e non si desidera aggiungere un altro pacchetto (ad esempio, il pacchetto weights
sopra), questa funzione (adattata dalla risposta di @ stefan) sembra funzionare:
numformat <- function(x, digits = 2) {
ncode <- paste0("%.", digits, "f")
sub("^(-?)0.", "\\1.", sprintf(ncode, x))
}
Così, per esempio:
> numformat(-.232, 2)
[1] "-.23"
> numformat(-.232, 3)
[1] "-.232"
> numformat(-.232, 4)
[1] "-.2320"
Se è per la segnalazione in R Markdown io uso il pacchetto MOTE con la funzione APA() e il codice: apa(-0.34, 2, FALSE)
questo tornerà -.34 nei miei documenti.
Ma 'sub' cambia la variabile in carattere ... –
correggendo: * modifiche –