Warum fügt as.matrix beim Konvertieren von Zahlen in Zeichen zusätzliche Leerzeichen hinzu?

Wenn Sie die Option "Auf Zeilen anwenden" für einen Datenrahmen mit Zeichen- und numerischen Spalten verwenden, wird "as.matrix" intern verwendet, um den Datenrahmen nur in Zeichen zu konvertieren. Wenn die numerische Spalte jedoch aus Zahlen unterschiedlicher Länge besteht, fügt as.matrix Leerzeichen hinzu, um der höchsten / "längsten" Zahl zu entsprechen.

Ein Beispiel:

df <- data.frame(id1=c(rep("a",3)),id2=c(100,90,8), stringsAsFactors = FALSE) 
df
##   id1 id2
## 1   a 100
## 2   a  90
## 3   a   8
as.matrix(df)
##      id1 id2  
## [1,] "a" "100"
## [2,] "a" " 90"
## [3,] "a" "  8"

Ich hätte erwartet, dass das Ergebnis ist:

     id1 id2  
[1,] "a" "100"
[2,] "a" "90"
[3,] "a" "8"

Warum die zusätzlichen Leerzeichen?

Sie können zu unerwarteten Ergebnissen führen, wenn Sie Apply für einen data.frame verwenden:

myfunc <- function(row){
  paste(row[1], row[2], sep = "")
}
> apply(df, 1, myfunc)
[1] "a100" "a 90" "a  8"
> 

Während der Schleife erhalten Sie das erwartete Ergebnis.

> for (i in 1:nrow(df)){
  print(myfunc(df[i,]))
}
[1] "a100"
[1] "a90"
[1] "a8"

und

> paste(df[,1], df[,2], sep = "")
[1] "a100" "a90"  "a8"  

Gibt es Situationen, in denen die zusätzlichen Leerzeichen, die mit as.matrix hinzugefügt werden, nützlich sind?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage