カラムタイプに基づいてデータフレームをサブセット化する必要があります。たとえば、カラム数が1003のデータフレームからは、factor
またはinteger
のカラムのみを保持する必要があります。私はこれを行うための短い関数を書いたが、よりシンプルな解決法や、CRANに組み込まれた関数やパッケージがあるのだろうか?次のようにカラムタイプに基づくデータフレームのサブセット変数
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))]
}
機能varlist
作品:すべての要求タイプの場合、データフレームの呼び出し「でのすべての列のための
- を要求された種類の変数名を取得する
私の現在のソリューション。 TYPE "関数
- すべての変数の合計テスト(ブール値は自動的に整数にキャストされます)
- 結果を論理ベクトルにキャストします
- サブセットデータフレーム内の名前
そして、それをテストするためのいくつかのデータ:
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"))
私は私のコードを理解することが、本当に不可解とハードに見えるので、でも私のために(尋ねると、私はしましたよ10分前に機能を終了しました)。
私は、私は完全にあなたの質問を理解していないが、なぜないだけで何か 'DF [sapply(DF、関数(x)はis.integer(のようなx)|| is.logical(x))] '? – A5C1D2H2I1M1N2O1R2T1
私はこの種のサブセット化を頻繁に行っています。そのため、私はこの機能を作成しようとしました。これは私の人生を単純化するためです。 –
Btw。なぜ、このかなり大きなdata.frameを再現可能な例でダウンロードする必要がありますか?次回は、組み込みデータセットの1つを使用するだけです。 – Roland