R列中的最大日期与sapply

时间:2016-07-08 05:15:35

标签: r max sapply

我正在尝试使用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)。

1 个答案:

答案 0 :(得分:2)

我们需要使用lapply代替sapply

lapply(mtcars, max)

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

sapply(mtcars, max, simplify = FALSE)

关于apply

的使用
apply(mtcars,2,max)

我不建议使用apply,因为这将转换为矩阵,矩阵只能容纳一个类。在这里,当'Date'类转换为character时,它将全部character输出。

关于OP在评论中提到的问题,当我们有属于不同类的输出时,我们可以使用listdata.frame(因为data.frame是{{1} }})作为list,即连接返回c,如上所述,它只能包含一个类。

vector