it-swarm.com.de

Wie steuere ich die Anzahl der Dezimalstellen in der Ausgabe von write.table ()?

Bei der Arbeit mit Daten (z. B. in data.frame) kann der Benutzer die Anzeige von Ziffern mithilfe von steuern

options(digits=3) 

und die data.frame wie folgt auflisten.

ttf.all

Wenn der Benutzer die Daten wie folgt in Excell einfügen muss

write.table(ttf.all, 'clipboard', sep='\t',row.names=F)

Der Ziffernparameter wird ignoriert und die Zahlen werden nicht gerundet.

Siehe Schöne Ausgabe

> ttf.all
  year V1.x.x V1.y.x ratio1 V1.x.y V1.y.y ratioR V1.x.x V1.y.x ratioAL V1.x.y V1.y.y ratioRL
1 2006    227    645   35.2     67    645   10.4    150    645    23.3     53    645    8.22
2 2007    639   1645   38.8    292   1645   17.8    384   1645    23.3    137   1645    8.33
3 2008   1531   3150   48.6    982   3150   31.2    755   3150    24.0    235   3150    7.46
4 2009   1625   3467   46.9   1026   3467   29.6    779   3467    22.5    222   3467    6.40

Aber was in Excel (Zwischenablage) steht, wird nicht gerundet. Wie steuere ich in write.table()?

52
userJT

Sie können die Funktion format() wie folgt verwenden:

write.table(format(ttf.all, digits=2), 'clipboard', sep='\t',row.names=F)

format() ist eine generische Funktion, die Methoden für viele Klassen enthält, einschließlich data.frames. Im Gegensatz zu round() wird kein Fehler ausgegeben, wenn Ihr Datenrahmen nicht ausschließlich numerisch ist. Weitere Informationen zu den Formatierungsoptionen finden Sie in der Hilfedatei unter ?format.

55
MattBagg

Hinzufügen einer Lösung für Datenrahmen mit gemischten Spalten character und numeric. Wir verwenden zuerst mutate_if , um numeric Spalten auszuwählen und wenden dann die round() Funktion auf sie an.

# install.packages('dplyr', dependencies = TRUE)
library(dplyr)

df <- read.table(text = "id  year V1.x.x V1.y.x ratio1
a 2006    227.11111    645.11111   35.22222  
b 2007    639.11111   1645.11111   38.22222  
c 2008   1531.11111   3150.11111   48.22222  
d 2009   1625.11111   3467.11111   46.22222",
                 header = TRUE, stringsAsFactors = FALSE)
str(df)
#> 'data.frame':    4 obs. of  5 variables:
#>  $ id    : chr  "a" "b" "c" "d"
#>  $ year  : int  2006 2007 2008 2009
#>  $ V1.x.x: num  227 639 1531 1625
#>  $ V1.y.x: num  645 1645 3150 3467
#>  $ ratio1: num  35.2 38.2 48.2 46.2


df <- df %>% 
  mutate_if(is.numeric, round, digits = 2)
df
#>   id year  V1.x.x  V1.y.x ratio1
#> 1  a 2006  227.11  645.11  35.22
#> 2  b 2007  639.11 1645.11  38.22
#> 3  c 2008 1531.11 3150.11  48.22
#> 4  d 2009 1625.11 3467.11  46.22

Erstellt am 17.03.2019 von reprex package (v0.2.1.9000)

2
Tung