При использовании 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 я хочу найти строки k (например, 3) с ближайшим к t3, но ниже t2 (и тем же v1), и вернуть статистику по v2 из этих строк (например, в среднем). Я написал функцию f (t2, v1, df) и просто хотел применить ее ко всем строкам с помощью apply(df, 1, function(x) f(y["t2"], y["v1"], df)
. Есть ли лучший способ сделать такие вещи в R?