2013-06-13 7 views
5

Ich muss einen Datenrahmen oder data.table generieren, die unterschiedliche Anzahl von Dezimalstellen pro Spalte hat.Schreibe einen Datenrahmen mit unterschiedlicher Anzahl von Dezimalstellen pro Spalte in R

Zum Beispiel:

Scale  Status 
1.874521 1 

Bedürfnisse in einer CSV gedruckt werden, wie:

Scale,  Status 
1.874521, 1.000 

Dies als numerischer Wert sein muss, als ich versucht habe, format(DF$status, digits=3) und as.numeric(format(DF$status, digits=3)) aber dies wandelt es in Zeichen, die, wenn sie in CSV exportiert werden, doppelte Anführungszeichen haben. "

Mein tatsächlicher Dataform hat viele Spalten mit unterschiedlichen Mengen von Dezimalstellen ces erforderlich sowie Zeichen, die doppelt zitiert werden müssen, so kann ich eine systemweite Änderung nicht anwenden.

+4

'write.csv' hat eine' quote' Option, die Sie auf 'FALSE' setzen können. –

+2

Sie können 'quote = FALSE' in' write.csv' ?? – Arun

+1

'quote = FALSE' würde definitiv tun, was er fragt. Ich frage mich nur, ob es im 'data.frame' auch Zeichenzeilen gibt, die mit dem doppelten Zitat gedruckt werden müssen. – Michele

Antwort

6

Eine bessere Option als quote=FALSE ist eigentlich anzugeben, welche Spalten Sie zitiert, da der quote Parameter ein Vektor von Spaltenindizes sein kann, die Sie zitiert werden sollen. Z.B.

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

Vielen Dank für diese sehr geschätzt. Ich habe jetzt eine Arbeitslösung, die 'as.data.table (DF [, STATUS: = format (STATUS, nsmall = 3)])' 'verwendet und den Vektor zum Quote-Parameter hinzufügt. Sehr einfache und elegante Lösung. Vielen Dank. – Richard

Verwandte Themen