2017-08-29 5 views
0

In diesem Beispiel I rbind zwei data.frames, und das Ergebnis ist, dass alle Werte zwei Dezimalzahlen haben. Allerdings möchte ich in Zeile 1 und 2.rbind Datenrahmen mit Werten mit unterschiedlichen Dezimalzahlen

one <- data.frame(matrix(c(1,2,3,4), ncol=2)); one 
two <- data.frame(matrix(c(1.63,8.88,9.17,2.31), ncol=2)); two 
rbind(one, two) 
+1

Sie können in einem 'list' speichern müssen andernfalls wird es aufgrund der Typpromotion eine einzelne Klasse geben, dh "liste (eins, zwei)" – akrun

Antwort

1

Sie können sprintf verwenden, aber dies wird Ihre Variablen in Zeichen (anstatt numerische konvertieren), dh

d1 <- rbind(one, two) 
d1[] <- lapply(d1, function(i) sprintf('%.6g', i)) 

, die

gibt
X1 X2 
1 1 3 
2 2 4 
3 1.63 9.17 
4 8.88 2.31 

aber die Struktur ist,

str(d1) 
'data.frame': 4 obs. of 2 variables: 
$ X1: chr "1" "2" "1.63" "8.88" 
$ X2: chr "3" "4" "9.17" "2.31" 

Wenn Sie es in numerische konvertieren, werden Sie erneut diese Dezimalstellen erhalten, dh

sapply(d1, as.numeric) 
#  X1 X2 
#[1,] 1.00 3.00 
#[2,] 2.00 4.00 
#[3,] 1.63 9.17 
#[4,] 8.88 2.31 
2

Vielleicht so etwas wie diese keine Dezimalzahlen haben:

test<-formatC(as.matrix(two),digits=2,format="f") 
rbind(one,test) 
Verwandte Themen