0

随着时间的推移,我有一系列点,我想将曲线拟合到这些点,然后找到曲线下的区域。我可以这样做:

fit<-loess(mass ~ hour, df)
f <- function(x) predict(fit,newdata=x)
answer<-integrate(f, 0, 60)$value  

到目前为止,一切都很好,但我的问题是我复制了这些点。我想要一个适合每个复制的值。

trt    rep    hour    mass
y      a      1       3
y      a      2       5
y      a      3       8
y      a      4       6
y      b      1       2
y      b      2       3
y      b      3       5
y      b      4       4
n      c      1       4
n      c      2       6
n      c      3       8
n      c      4       7
n      d      1       5
n      d      2       7
n      d      3       8
n      d      4       7 

我想dplyr::group_by(rep),但分组没有通过fit。我也可以对 innlme和 use进行分组nlsList,但该包通常不适用于loess多项式或多项式。

4

1 回答 1

2

似乎是do(). 使用您的样本数据

dd <- read.table(text="trt    rep    hour    mass
y      a      1       3
y      a      2       5
y      a      3       8
y      a      4       6
y      b      1       2
y      b      2       3
y      b      3       5
y      b      4       4
n      c      1       4
n      c      2       6
n      c      3       8
n      c      4       7
n      d      1       5
n      d      2       7
n      d      3       8
n      d      4       7 ", header=T)

和你的面积计算

get_area <- function(df) {
    fit <- loess(mass ~ hour, df)
    f <- function(x) predict(fit,newdata=x)
    integrate(f, 0, 60)$value  
}

你可以跑

dd %>% group_by(rep) %>% do(area=get_area(.))
于 2017-03-15T15:21:19.487 回答