你需要一个包含插值数值的数据集吗?如果是这样,我已经扩展了数据集,使其包含在进行样条计算之前所需的x位置。
这些点的分辨率由 expand.grid()
函数的第二行确定。只需确保原始深度点是扩展深度点的一个子集(例如,不要使用不均匀的东西,如 by=.732
)。
library(magrittr)
ds <- readr::read_csv("trt,depth,root,carbon\nA,2,1,14\nA,4,2,18\nA,6,3,18\nA,8,3,17\nA,10,1,12\nB,2,3,16\nB,4,4,18\nB,6,4,17\nB,8,2,15\nB,10,1,12")
ds_depths_possible <- expand.grid(
depth = seq(from=min(ds$depth), max(ds$depth), by=.5),
trt = c("A", "B"),
stringsAsFactors = FALSE
)
ds_intpolated <- ds %>%
dplyr::right_join(ds_depths_possible, by=c("trt", "depth")) %>%
dplyr::group_by(trt) %>%
dplyr::mutate(
root_interpolated = spline(x=depth, y=root , xout=depth)$y,
carbon_interpolated = spline(x=depth, y=carbon, xout=depth)$y
) %>%
dplyr::ungroup()
ds_intpolated
输出:
Source: local data frame [34 x 6]
trt depth root carbon root_interpolated carbon_interpolated
(chr) (dbl) (int) (int) (dbl) (dbl)
1 A 2.0 1 14 1.000000 14.00000
2 A 2.5 NA NA 1.195312 15.57031
3 A 3.0 NA NA 1.437500 16.72917
4 A 3.5 NA NA 1.710938 17.52344
5 A 4.0 2 18 2.000000 18.00000
6 A 4.5 NA NA 2.289062 18.21094
7 A 5.0 NA NA 2.562500 18.22917
8 A 5.5 NA NA 2.804688 18.13281
9 A 6.0 3 18 3.000000 18.00000
10 A 6.5 NA NA 3.132812 17.88281
.. ... ... ... ... ... ...
![carbon](https://istack.dev59.com/eOiry.webp)
在上面的图表中,小点和线是插值出来的。大而粗的点是观测到的。
library(ggplot2)
ggplot(ds_intpolated, aes(x=depth, y=root_interpolated, color=trt)) +
geom_line() +
geom_point(shape=1) +
geom_point(aes(y=root), size=5, alpha=.3, na.rm=T) +
theme_bw()
ggplot(ds_intpolated, aes(x=depth, y=carbon_interpolated, color=trt)) +
geom_line() +
geom_point(shape=1) +
geom_point(aes(y=carbon), size=5, alpha=.3, na.rm=T) +
theme_bw()
如果您需要更多示例,这里有一些最近的
代码和
幻灯片。我们需要一个滚动中位数来处理一些缺失点,并使用线性
stats::approx()
处理其他一些点。另一个选择是
stats::loess()
,但它的参数与
approx()
和
spline()
不太相似。
summarise_each(funs(splinefun(., x=depth, method="natural")))
这行可能有些问题。它不应该像这样summarise_each(funs(splinefun(y = ., x=depth, method="natural")))
吗? - stevebfuns
应该接受一个函数名称的向量或由funs
返回的列表。我本来就不会期望y=.
能够工作,因为 y 应该是一个向量,而.
的值将是一个 table_df(或者那些 dplyr 东西被称为什么)。我无法提供经过测试的解决方案,因为我所做的所有努力都会导致我的当前版本的 R 与当前(在 CRAN 上)版本的 dplyr 崩溃。 - IRTFM