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"])
ますか?
edit
私の df には 2 つのタイムスタンプ (t2 と t3 など) とその他のフィールド (v1、v2 など) があります。与えられた t2 の行ごとに、t3 が t2 に最も近いが t2 より低い (および同じ v1) を持つ k (たとえば 3) 行を見つけ、これらの行から v2 の統計 (たとえば平均) を返したいと考えています。関数 f(t2, v1, df) を作成し、 を使用してすべての行に適用したかっただけapply(df, 1, function(x) f(y["t2"], y["v1"], df)
です。Rでそのようなことを行うより良い方法はありますか?