Cat*_*ick 5 aggregate r function subset
我大约有7500个沉降值。每个沉降值(V9)对应一个测站(V2)和一个年份(V3)。我想为每个站设置一条最合适的线(V9〜V3)。
我使用lm创建了一个函数,该函数在手动子集数据时可以正常工作。但是,当我尝试使用聚合在每个工作站上运行线性模型时,每个工作站都会获得相同的值。
这是一些数据的示例:
V2 V3 V9
CRMS0002 2008 -28.4990000
CRMS0002 2009 -28.8080808
CRMS0002 2012 -31.9871795
CRMS0006 2008 -56.8998413
CRMS0006 2013 40.8611111
CRMS0006 2015 32.8555555
CRMS0033 2007 -16.8044444
Run Code Online (Sandbox Code Playgroud)
这是代码:
sub_rate = function(x) {lm(CRMSsub$V9~CRMSsub$V3)}
agg <- aggregate(CRMSsub$V9, by = list(CRMSsub$V2), FUN = sub_rate)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
agg <- lapply(split(CRMSsub, CRMSsub$V3), FUN = sub_rate)
Run Code Online (Sandbox Code Playgroud)
根据第一和第二代码的一部分进行汇总。因此,我得到了354个按工位组织的元素,但是每个工位的线性模型结果(分别给出截距和斜率)相同,这意味着它无法按工位执行功能。这是结果的示例:
Group.1 x
CRMS0002 c(`(Intercept)` = -2333.06378840009, `CRMSsub$V3` = 1.1541441797906)
CRMS0006 c(`(Intercept)` = -2333.06378840009, `CRMSsub$V3` = 1.1541441797906)
CRMS0033 c(`(Intercept)` = -2333.06378840009, `CRMSsub$V3` = 1.1541441797906)
Run Code Online (Sandbox Code Playgroud)
您的方法的问题是您在 的调用中指定了数据集sub_rate。您还需要指定数据集,如x中所示lapply()。例如你可以这样做:
library(dplyr)
sub_rate <- function(x){lm(x$V9~x$V3)}
lapply(CRMSsub %>% split(.$V2),sub_rate)
Run Code Online (Sandbox Code Playgroud)