Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dplyr内插值样条曲线_R_Dplyr_Spline - Fatal编程技术网

在dplyr内插值样条曲线

在dplyr内插值样条曲线,r,dplyr,spline,R,Dplyr,Spline,我正在尝试为以下示例数据插值样条曲线: trt depth root carbon A 2 1 14 A 4 2 18 A 6 3 18 A 8 3 17 A 10 1 12 B 2 3 16 B 4 4

我正在尝试为以下示例数据插值样条曲线:

trt    depth    root    carbon
A       2        1        14
A       4        2        18
A       6        3        18
A       8        3        17
A      10        1        12
B       2        3        16
B       4        4        18
B       6        4        17
B       8        2        15
B      10        1        12
以以下方式:

new_df<-df%>%
  group_by(trt)%>%
  summarise_each(funs(splinefun(., x=depth, method="natural")))
new_df%
分组依据(trt)%>%
总结每一项(funs(splinefun(,x=深度,method=“natural”))

我得到一个
错误:不是向量,但我不明白为什么不是。我不是用正确的方式表达了这个函数吗?

我放弃了尝试获取dplyr::summary_each
(而且还尝试了dplyr::summary_each,因为您选择的函数似乎与您希望多列输入只返回两个函数的愿望不匹配。)我不确定在
dply
中是否可能。下面是一种可以被称为实现这一点的规范方法:

 lapply( split(df, df$trt), function(d) splinefun(x=d$depth, y=d$carbon) )
#-------------

$A
function (x, deriv = 0L) 
{
    deriv <- as.integer(deriv)
    if (deriv < 0L || deriv > 3L) 
        stop("'deriv' must be between 0 and 3")
    if (deriv > 0L) {
        z0 <- double(z$n)
        z[c("y", "b", "c")] <- switch(deriv, list(y = z$b, b = 2 * 
            z$c, c = 3 * z$d), list(y = 2 * z$c, b = 6 * z$d, 
            c = z0), list(y = 6 * z$d, b = z0, c = z0))
        z[["d"]] <- z0
    }
    res <- .splinefun(x, z)
    if (deriv > 0 && z$method == 2 && any(ind <- x <= z$x[1L])) 
        res[ind] <- ifelse(deriv == 1, z$y[1L], 0)
    res
}
<bytecode: 0x7fe56e4853f8>
<environment: 0x7fe56efd3d80>

$B
function (x, deriv = 0L) 
{
    deriv <- as.integer(deriv)
    if (deriv < 0L || deriv > 3L) 
        stop("'deriv' must be between 0 and 3")
    if (deriv > 0L) {
        z0 <- double(z$n)
        z[c("y", "b", "c")] <- switch(deriv, list(y = z$b, b = 2 * 
            z$c, c = 3 * z$d), list(y = 2 * z$c, b = 6 * z$d, 
            c = z0), list(y = 6 * z$d, b = z0, c = z0))
        z[["d"]] <- z0
    }
    res <- .splinefun(x, z)
    if (deriv > 0 && z$method == 2 && any(ind <- x <= z$x[1L])) 
        res[ind] <- ifelse(deriv == 1, z$y[1L], 0)
    res
}
<bytecode: 0x7fe56e4853f8>
<environment: 0x7fe56efc4db8>
lappy(分裂(df,df$trt),功能(d)夹板(x=d$depth,y=d$carbon))
#-------------
一美元
功能(x,deriv=0L)
{
德里夫(3L)
停止(“'deriv'必须介于0和3之间”)
如果(发动机转速>0升){

z0是否需要包含插值值的数据集?如果是,我已将数据集展开,以在计算样条曲线之前包含所需的x位置

这些点的分辨率在
expand.grid()
函数的第二行中确定。只需确保原始深度点是扩展深度点的子集(例如,不要使用像
by=.732
这样的不均匀点)

在上面的图中,小的点和线被插值。大的胖点被观察到

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::alluch()
,但它的参数与
approx()
spline()不同

我不知道你的问题的答案,但我认为这句话可能有点不对(funs(splinefun(,x=depth,method=“natural”))
。它不应该是类似于
总结每个(funs(splinefun(y=,x=depth,method=“natural”))
funs
应该采用函数名的向量或由
funs
返回的列表。我本来不希望
y=。
能够正常工作,因为y应该是一个向量,
的值应该是一个表(或者不管那些dplyr的东西叫什么。我无法提供一个经过测试的解决方案,因为我所做的所有努力都是将我当前版本的R与当前(无论如何,在CRAN上)版本的dplyr进行区分。
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
..   ...   ...   ...    ...               ...                 ...
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()