【问题标题】:Return number of columns of a certain data type in a matrix返回矩阵中某种数据类型的列数
【发布时间】:2018-08-24 21:56:55
【问题描述】:

我必须创建一个函数 ncol_type(df, ty),它返回 df 中类型为 ty 的列数。

这是我目前所拥有的:

ncol_type = function(df, ty) {
    for (col_name in names(df)) {
        col_vector_class <- class(df[,col_name])
        c == 0
        if (col_vector_class == ty) {
            c = c + 1
        }
     return(c)
    }
}

例如,如果我输入 n_col_type(df, "integer"),其中矩阵 df 有两列整数数据类型,我希望函数返回“2”。

我不确定我做错了什么。谢谢。

【问题讨论】:

  • A matrix 只能容纳一种类型。您最可能的意思是dataframe。只是为了让您掌握正确的术语。
  • @AndreElrico 谢谢安德烈。我会更改标签
  • 我会使用sum(sapply(df,is.interger))之类的东西,当然你需要在sapply中动态设置“is.class”部分。
  • 也许不是您的问题,但您可以使用table(sapply(iris, function(a) class(a)[1])) 一次获取所有类型。 ([1] 是处理一些返回 2+ 的东西的 hack,例如 class(Sys.time())。)
  • @r2evans 听起来不错。下面的答案回答了它。谢谢!

标签: r function for-loop dataframe column-types


【解决方案1】:

您可以重新编写代码,只需使用sum 并使用sapply 进行迭代

ncol_type <- function(df, ty){
  sum(sapply(df, function(x) class(x)==ty))
}

ncol_type(iris, "factor")
[1] 1
ncol_type(iris, "numeric")
[1] 4

【讨论】:

  • 您可能希望ty %in% class(x) 而不是class(x)==ty 更通用
  • (此处重复,以防读者没有看到我上面的评论或正在寻找关键字。)如果您有任何多类列,例如 POSIXcttbl_df,这不起作用,你需要 Moody_Mudskipper 提供的 %in% 技巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多