r - 在 for 循环中运行 sapply 的更快方法

标签 r for-loop sapply

我试图找到一种更快的方法来运行一个函数,该函数正在寻找一个时间段内每一天的中值。有没有比在 for 循环中运行 Sapply 更快的方法?

for(z in unique(as.factor(df$group))){
all[[z]]<- sapply(period, function(x) median(df[x == df$date & df$group==z, 'y']))
}

示例数据:

date<-as.Date("2011-11-01") + 
runif( 1000, 
       max=as.integer( 
           as.Date( "2012-12-31") - 
               as.Date( "2011-11-01")))
period<-as.Date(min(df$date):max(df$date), origin = "1970-01-01")
df <- data.frame(date=date, y = rnorm(1000), group=factor(rep(letters[1:4], each=250)))

最佳答案

如果我没理解错的话,您想按组拆分,然后计算每个日期内的中位数。这是一个 data.table 解决方案。

编辑:问题出在数据集的date 格式上。它似乎报告了错误的唯一元素的数量。因此,我不得不将其重铸为 POSIXct 格式。

df$date <- as.POSIXct(as.character(df$date), format="%Y-%m-%d")
require(data.table)
dt <- data.table(df)

setkey(dt, "date")
dt.out <- dt[, lapply(letters[1:4], 
          function(x) median(y[group == x])), by = date]

这与 Victor 的输出相同。

关于r - 在 for 循环中运行 sapply 的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14573771/

相关文章:

R - 将估算的缺失值放回到数据框中

r - 用ggplot约束stat_smooth中的斜率(绘图ANCOVA)

r - 汇总每月状态数据以排序数据

r - 从插入符号模型收集折叠外预测

python - Pandas - 替换 for 循环以提高效率

r - 具有 2 个计数变量的 lapply 函数

c++ - 无法在C++ for循环中获取两个变量进行更新

python - "for i in range (...)"之前是什么

r - 字符向量上的 "subscript out of bounds"

R - 比较两个分层列表之间的公共(public)元素的循环