gpt4 book ai didi

r - 基于列类型的数据框中的子集变量

转载 作者:行者123 更新时间:2023-12-04 05:12:53 24 4
gpt4 key购买 nike

我需要基于列类型对数据帧进行子集化-例如,从具有100列的数据帧中,我只需要保留那些类型为factorinteger的列。我已经编写了一个简短的函数来执行此操作,但是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的工作方式如下:
  • 对于每种请求的类型以及数据帧中的每一列,请调用“is.TYPE”函数
  • 对每个变量求和( bool 值自动转换为整数)
  • 将结果转换为逻辑向量
  • 数据帧中的
  • 子集名称

    和一些数据来测试它:
    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分钟前完成了该功能)。

  • 最佳答案

    subset_colclasses <- function(DF, colclasses="numeric") {
    DF[,sapply(DF, function(vec, test) class(vec) %in% test, test=colclasses)]
    }

    str(subset_colclasses(df, c("factor", "integer")))

    关于r - 基于列类型的数据框中的子集变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17964513/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com