2013-06-13 20 views
5

Ho bisogno di generare un dataframe o data.table che ha un numero diverso di posizioni decimali per colonna.Scrivere un dataframe con un numero diverso di posizioni decimali per colonna in R

Ad esempio:

Scale  Status 
1.874521 1 

deve essere stampare in un CSV come:

Scale,  Status 
1.874521, 1.000 

Questo deve essere il valore numerico come ho cercato format(DF$status, digits=3) e as.numeric(format(DF$status, digits=3)) tuttavia questo converte caratteri che quando esportati in CSV hanno doppi apici. "

Il mio dataframe attuale ha un sacco di colonne con diverse quantità di cifre decimali richiesto così come i caratteri che devono essere citati in modo doppio, quindi non posso applicare una modifica a livello di sistema.

+4

'write.csv' ha un'opzione' quote' che è possibile impostare su 'FALSE'. –

+2

puoi usare 'quote = FALSE' in' write.csv' ?? – Arun

+1

'quote = FALSE' farebbe sicuramente quello che sta chiedendo. Mi chiedo solo se nel 'data.frame' ci siano anche colonne di caratteri che devono essere stampate con la doppia citazione. – Michele

risposta

6

Un'opzione migliore di fare quote=FALSE, è in realtà specificare quali colonne si desidera quotare, come il parametro quote può essere un vettore di indici di colonna che si desidera quotare. Per esempio.

d = data.table(a = c("a", "b"), b = c(1.234, 1.345), c = c(1, 2.1)) 
d[, b := format(b, digits = 2)] 
d[, c := format(c, nsmall = 3)] 
d 
# a b  c 
#1: a 1.2 1.000 
#2: b 1.3 2.100 

write.csv(d, 'file.csv', quote = c(1,2), row.names = F) 
#file.csv: 
#"a","b","c" 
#"a","1.2",1.000 
#"b","1.3",2.100 
+0

Grazie per questo molto apprezzato. Ora ho una soluzione funzionante usando 'as.data.table (DF [, STATUS: = format (STATUS, nsmall = 3)])' e aggiungendo il vettore al parametro quote. Soluzione molto semplice ed elegante. Grazie. – Richard

Problemi correlati