395 Stimmen

data.frame-Spalten von Faktoren in Zeichen umwandeln

Ich habe einen Datenrahmen. Nennen wir ihn bob :

> head(bob)
                 phenotype                         exclusion
GSM399350 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399351 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399352 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399353 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399354 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399355 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-

Ich möchte die Zeilen dieses Datenrahmens verketten (dies wird eine weitere Frage sein). Aber sehen Sie:

> class(bob$phenotype)
[1] "factor"

Bob Spalten sind Faktoren. Also, zum Beispiel

> as.character(head(bob))
[1] "c(3, 3, 3, 6, 6, 6)"       "c(3, 3, 3, 3, 3, 3)"      
[3] "c(29, 29, 29, 30, 30, 30)"

Ich verstehe das nicht ganz, aber ich vermute, dass es sich um Indizes für die Ebenen der Faktoren der Säulen (des Hofes von König Caractacus) von bob ? Nicht das, was ich brauche.

Seltsamerweise kann ich durch die Spalten von bob von Hand, und tun

bob$phenotype <- as.character(bob$phenotype)

was gut funktioniert. Und nach einiger Tipparbeit kann ich einen data.frame erhalten, dessen Spalten Zeichen und nicht Faktoren sind. Meine Frage lautet also: Wie kann ich dies automatisch tun? Wie kann ich einen data.frame mit Faktorenspalten in einen data.frame mit Zeichenspalten umwandeln, ohne jede Spalte manuell durchgehen zu müssen?

Zusatzfrage: Warum funktioniert der manuelle Ansatz?

1voto

Cedric Punkte 2302

Diese Funktion erfüllt diesen Zweck

df <- stacomirtools::killfactor(df)

0voto

rachelette Punkte 39

Vielleicht eine neuere Option?

library("tidyverse")

bob <- bob %>% group_by_if(is.factor, as.character)

0voto

Ferroao Punkte 2333

Dabei werden alle Zeichen in Zeichen umgewandelt und dann die Zahlen in Zahlen:

makenumcols<-function(df){
  df<-as.data.frame(df)
  df[] <- lapply(df, as.character)
  cond <- apply(df, 2, function(x) {
    x <- x[!is.na(x)]
    all(suppressWarnings(!is.na(as.numeric(x))))
  })
  numeric_cols <- names(df)[cond]
  df[,numeric_cols] <- sapply(df[,numeric_cols], as.numeric)
  return(df)
}

Angepasst von: Spaltentypen einer Excel-Tabelle automatisch abrufen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X