2016-07-08 50 views
0

我想使用sapply獲取列中的最大日期,但它返回一個數字而不是日期。任何想法如何解決這個問題?我似乎無法找出爲什麼這是發生..在R列與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給予我已經設置的方式......我知道這工作與應用(mtcars,2,最大值)。

+0

要將數字日期格式轉換爲可讀的日期格式,只需轉換您的datecolm列數據。例如'as.date(16687,origin =「1970-01-01」)' –

回答

2

我們需要使用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,因爲這將轉化爲基質,基質只能容納一個類。在這裏,當'Date'類轉換爲character時,它將全部輸出character


關於由OP在評論中提到的問題,當我們有屬於不同類的輸出,我們既可以使用listdata.frame(如data.framelist)爲c即連擊返回一個vector和如上所述,它只能容納一個班級。

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

我試過用這樣的東西,它不工作 - --- as.data.frame(lapply(mtcars,function(x)c(class (x),max(x,na.rm = TRUE)))) – runningbirds

+0

@runningbirds我更新了你提到的問題 – akrun