apply
をdata.frameに使用すると、引数は(暗黙的に)文字に変換されます。例:データフレームへの適用を使用するときの暗黙的な文字変換の回避方法
df <- data.frame(v=1:10, t=1:10)
df <- transform(df, t2 = as.POSIXlt(t, origin = "2013-08-13"))
class(df$t2[1])
## [1] "POSIXct" "POSIXt" (correct)
しかし:
apply(df, 1, function(y) class(y["t2"]))
## [1] "character" "character" "character" "character" "character" "character"
## [7] "character" "character" "character" "character"
この変換を避けるためにどのような方法がありますか?または、いつもas.POSIXlt(y["t2"])
に変換する必要がありますか?
編集
私のDFが2つのタイムスタンプ(たとえば、t2とt3)といくつかの他のフィールドを持っている(たとえば、V1、V2)。与えられたt2を持つ各行について、t2に最も近いがt2よりも低い(そして同じv1)t3を有するk個(例えば3)の行を見つけ出し、これらの行から統計をv2に戻したい(例えば平均)。私は関数f(t2、v1、df)を書いて、apply(df, 1, function(x) f(y["t2"], y["v1"], df)
を使ってすべての行に適用したかっただけです。 Rでこのようなことをするより良い方法はありますか?
本当の答えは、データフレームに 'apply'を使うべきではないということです。あなたは何をしようとしているのですか? – joran
'data.frame'が' matrix'に強制変換されているので、*変換*が発生しています。 –
あなたの編集内容には、実際には2つの異なる質問(IMO)があります。私は適切なデータセット、あなたが試したもの、そしてあなたが望む出力を使って、2番目の質問(あなたの編集)を聞いてみましょう。 –