Teilmengenvariablen im Datenrahmen basierend auf dem Spaltentyp

Ich muss Datenrahmen basierend auf dem Spaltentyp unterteilen - zum Beispiel von Datenrahmen mit 100 Spalten muss ich nur die Spalten mit dem Typ behaltenfactor oderinteger. Ich habe eine kurze Funktion geschrieben, um dies zu tun, aber gibt es eine einfachere Lösung oder eine integrierte Funktion oder ein Paket für CRAN?

Meine aktuelle Lösung, um Variablennamen mit angeforderten Typen zu erhalten:

varlist <- function(df=NULL, vartypes=NULL) {
  type_function <- c("is.factor","is.integer","is.numeric","is.character","is.double","is.logical")
  names(type_function) <- c("factor","integer","numeric","character","double","logical")
  names(df)[as.logical(sapply(lapply(names(df), function(y) sapply(type_function[names(type_function) %in% vartypes], function(x) do.call(x,list(df[[y]])))),sum))]  
}

Die Funktionvarlist funktioniert wie folgt:

Für jeden angeforderten Typ und für jede Spalte im Datenrahmen wird die Funktion "is.TYPE" aufgerufenSummentests für jede Variable (Boolescher Wert wird automatisch in Ganzzahl umgewandelt)Ergebnis in logischen Vektor umwandelnNamen von Teilmengen im Datenrahmen

Und ein paar Daten zum Testen:

df <- read.table(file="http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data", sep=" ", header=FALSE, stringsAsFactors=TRUE)
names(df) <- c('ca_status','duration','credit_history','purpose','credit_amount','savings', 'present_employment_since','installment_rate_income','status_sex','other_debtors','present_residence_since','property','age','other_installment','housing','existing_credits', 'job','liable_maintenance_people','telephone','foreign_worker','gb')
df$gb <- ifelse(df$gb == 2, FALSE, TRUE)
df$property <- as.character(df$property)
varlist(df, c("integer","logical"))

Ich frage, weil mein Code wirklich kryptisch und schwer zu verstehen aussieht (auch für mich und ich habe die Funktion vor 10 Minuten beendet).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage