【问题标题】:Max date in R column with sapplyR 列中的最大日期与 sapply
【发布时间】:2016-07-08 05:15:35
【问题描述】:

我正在尝试使用 sapply 获取列中的最大日期,但它返回的是数字而不是日期。知道如何解决这个问题吗?我似乎无法弄清楚为什么会发生这种情况..

 mtcars$datecolm = '2015-03-03'
 mtcars$datecolm[1] = '2015-09-09'
  mtcars$datecolm = as.Date(mtcars$datecolm)

    sapply(mtcars, max)   # why is it returning a number instead of a date??
    max(mtcars$datecolm)   # works correctly

请按照我的设置方式使用 sapply...我知道这适用于 apply(mtcars,2,max)。

【问题讨论】:

  • 要将数字日期形式转换为可读的日期形式,只需转换您的 datecolm 列数据。例如as.Date(16687, origin="1970-01-01")

标签: r max sapply


【解决方案1】:

我们需要使用lapply 而不是sapply

lapply(mtcars, max)

因为sapply 返回一个vector,因为simplify=TRUE 默认参数和vector 只能包含一个类。由于有数字列,“日期”列(存储为整数)被强制转换为 integer 值。但是,如果我们使用simplify = FALSE 返回list,我们仍然可以使用sapply

sapply(mtcars, max, simplify = FALSE)

关于apply的使用

apply(mtcars,2,max)

我不建议使用apply,因为这将转换为矩阵并且矩阵只能容纳一个类。在这里,所有的输出都是character,因为“日期”类被转换为character


关于 OP 在 cmets 中提到的问题,当我们有属于不同类的输出时,我们可以使用listdata.frame(因为data.framelist)作为c 即concatenate 返回一个vector,如上所述,它只能容纳一个类。

do.call(rbind, lapply(mtcars, function(x) 
          data.frame(Class=class(x), Max=max(x, na.rm=TRUE))))

【讨论】:

  • 我尝试使用类似的东西,但它不起作用 - ---as.data.frame(lapply(mtcars, function(x) c(class(x), max(x, na.rm) =真))))
  • @runningbirds 我用你提到的问题更新了帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 2021-11-30
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多