在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 的每一行,我想找到 t3 最接近但低于 t2 的 k(例如 3)行(以及相同的 v1),并从这些行返回 v2 的统计信息(例如平均值)。我写了一个函数 f(t2, v1, df) 并且只是想将它应用到所有使用apply(df, 1, function(x) f(y["t2"], y["v1"], df)
. 有没有更好的方法在 R 中做这些事情?