2016-07-08 5 views
0

カラムで最大日付を取得するためにsapplyを使用しようとしていますが、日付ではなく数値が返されています。どのようにこれを解決するためのアイデア?私は、これが適用されます(mtcars、2、最大)で動作します知っている... sapply私はこれを設定している途中与え使用してくださいサプリでRカラムの最大日付

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 

。これが発生している理由を把握するように見えることはできません。

+0

数値の日付形式を読み取り可能な日付形式に変換するには、datecolm列のデータを変換するだけです。例えば'as.Date(16687、origin =" 1970-01-01 ")' –

答えて

2

は、我々は唯一の単一のクラスを保持することができます代わりにsapply

lapply(mtcars, max) 

sapplyとして返すためsimplify=TRUEデフォルト引数のvectorvectorlapplyを使用する必要があります。数値列があるので、(日付として)整数列として格納されている列は、integer値に強制的に変換されます。ただし、simplify = FALSEを使用してlistを返す場合は、sapplyを引き続き使用できます。私はこれが行列に変換されますと、マトリックスは、単一のクラスを保持できるようapplyを使用してお勧めしませんapply

apply(mtcars,2,max) 

の使用について

sapply(mtcars, max, simplify = FALSE) 

。ここでは、 'Date'クラスがcharacterに変換されたため、出力はすべてcharacterになります。コメントでOPが言及した問題に関しては


、我々は別のクラスに属する出力を持っている場合(data.framelistように)、我々はcとしてlistまたはdata.frameを使用することができますいずれかすなわちCONCATENATEはvectorとしてを返します。 1つのクラスだけを保持することができます。

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