2013-06-13 9 views
5

Potrzebuję wygenerować ramkę danych lub tabelę danych, która ma różną liczbę miejsc po przecinku na kolumnę.Napisz ramkę danych z różną liczbą miejsc dziesiętnych na kolumnę w R

Na przykład:

Scale  Status 
1.874521 1 

należy wydrukować w formacie CSV jako:

Scale,  Status 
1.874521, 1.000 

To musi być w postaci wartości liczbowej jak próbowałem format(DF$status, digits=3) i as.numeric(format(DF$status, digits=3)) jednak ten konwertuje go do znaków, które po wyeksportowaniu do pliku CSV mają podwójne cudzysłowy. "

Moja aktualna ramka danych ma wiele kolumn z różnymi liczbami dziesiętnymi wymagane, a także znaki, które muszą być podwójnie cytowane, więc nie mogę zastosować zmiany całego systemu.

+4

'write.csv' ma opcję' quote', którą można ustawić na 'FALSE'. –

+2

możesz użyć 'quote = FALSE' w' write.csv' ?? – Arun

+1

'quote = FALSE' zdecydowanie zrobiłby to, o co prosił. Zastanawiam się tylko, czy w "data.frame" ma on również kolumny znaków, które trzeba wydrukować z podwójną kwotą. – Michele

Odpowiedz

6

Lepszym rozwiązaniem niż robi quote=FALSE, jest rzeczywiście określić, które kolumny chcesz cytowany jako quote param może być wektorem indeksów kolumn, które chcesz być cytowane. Na przykład.

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

Dzięki za tak bardzo docenione. Mam działające rozwiązanie, teraz używając 'as.data.table (DF [, STATUS: = format (STATUS, nsmall = 3)])' i dodając wektor do parametru quote. Bardzo proste i eleganckie rozwiązanie. dzięki. – Richard

Powiązane problemy