【发布时间】:2019-09-25 10:11:10
【问题描述】:
我有 5 列和大约 12 000 000 行的数据框。
lon lat for_R_WDEP_SOX number year
2 -29.95 30.05 128.44461 1 2000
624002 -29.95 30.05 320.17755 1 2001
1248002 -29.95 30.05 192.20628 1 2002
1872002 -29.95 30.05 325.44336 1 2003
2496002 -29.95 30.05 368.46976 1 2004
3120002 -29.95 30.05 409.80154 1 2005
3744002 -29.95 30.05 265.71161 1 2006
4368002 -29.95 30.05 147.92351 1 2007
4992002 -29.95 30.05 279.87851 1 2008
5616002 -29.95 30.05 136.38370 1 2009
6240002 -29.95 30.05 223.43958 1 2010
6864002 -29.95 30.05 132.92253 1 2011
7488002 -29.95 30.05 112.68416 1 2012
8112002 -29.95 30.05 83.81801 1 2013
8736002 -29.95 30.05 80.33523 1 2014
9360002 -29.95 30.05 71.58231 1 2015
9984002 -29.95 30.05 91.07822 1 2016
10608002 -29.95 30.05 98.69281 1 2017
我尝试对它使用摸索功能
gromov_analise_fuction <- function(table)
{
x <- table$year
y <- table$for_R_WDEP_SOX
line<- lm(y~x)
p_value_coef <- summary(line)$coefficients["x","Estimate"]/abs(summary(line)$coefficients["x","Estimate"])*(1 -summary(line)$coefficients["x","Pr(>|t|)"])
k <- summary(line)$coefficients["x","Estimate"]
B_K <- summary(line)$coefficients["x","Estimate"]*1800/summary(line)$coefficients["(Intercept)","Estimate"]
result_vector <- c(p_value_coef,k,B_K)
return (result_vector)
}
result <- table %>%
group_by(number) %>%
do(data.frame(val=gromov_analise_fuction(.)))
它的工作时间约为 30-37 分钟。 请告诉我是什么原因? 我应该如何让这段代码运行得更快。
据我了解,我应该删除未使用的向量和 data.frame。
【问题讨论】:
-
看起来你正在拟合近一百万个回归模型......
-
假设您总是有相同的年份,可以通过重塑数据并利用
lm接受公式的 LHS 上的矩阵来显着加快这一速度。但我不确定这样的大数据。如果您需要进一步的帮助,请创建一个可重现的示例。 -
是的,你是对的。我正在拟合大约 600 000 个模型。
-
你可能想试试
data.table,应该比dplyr快得多。 -
让我引用我自己的话:“如果您需要进一步的帮助,请创建一个可重现的示例。”
标签: r function memory group-by