当在数据框上使用apply
时,参数会被(隐式)转换为字符类型。例如:
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"])
进行转换回去吗?编辑 我的数据框中有2个时间戳(例如,t2和t3)和一些其他字段(例如,v1、v2)。对于每行给定的t2,我想找到k(例如3)个最接近但小于t2的t3行(并且相同的v1),并从这些行返回关于v2的统计信息(例如平均值)。我编写了一个函数f(t2,v1,df),只想应用它在所有行上使用
apply(df,1,function(x) f(y["t2"],y["v1"],df)
。在R中有更好的方法来做这样的事情吗?
apply
。你想要做什么? - jorandata.frame
正在被强制转换为一个matrix
。 - Simon O'Hanlonapply
是一种简单的方法,可以抓取一行并访问列。例如,“从每一行中获取第1列和第4列,并对它们进行某些操作”。有没有更好的方法来实现这个目标?使用apply
是否被认为是本质上不良的做法?如果是,原因是什么? - SlowLearner