【问题标题】:R: approxfun complains about "object cannot be coerced to type 'double'"R: approxfun 抱怨“对象不能被强制输入‘double’”
【发布时间】:2023-03-26 10:30:01
【问题描述】:

我有一个与此类似(甚至更简单)的解决方案: How to interpolate data in R

但这对我不起作用。 我已使用 dput 对我的数据进行快照。

  a <- structure(list(
    time = structure(
       c(1566381574.097, 1566381542.104, 1566381510.109, 1566381390.134, 1566381330.118,
         1566381300.107, 1566381240.114, 1566381210.114, 1566381173.903, 1566381148.113
       ), class = c("POSIXct", "POSIXt"), tzone = ""),
    value = c(164.1, 162.3, 161.1, 158.6, 159.6, 157.6, 159, 157.8, 155.3, 155.3
  )), class = "data.frame", row.names = c(NA, 10L))

  b <- structure(list(time = structure(
    c(1566381120, 1566381180, 1566381240, 1566381300, 1566381360, 1566381420, 1566381480, 1566381540
    ), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, 8L), class = "data.frame")

  head(a)
  head(b)

  result <- b
  result$value <- approxfun(a$time,a$value)(b)

这就是我得到的:

>   head(a)
                 time value
1 2019-08-21 11:59:34 164.1
2 2019-08-21 11:59:02 162.3
3 2019-08-21 11:58:30 161.1
4 2019-08-21 11:56:30 158.6
5 2019-08-21 11:55:30 159.6
6 2019-08-21 11:55:00 157.6
>   head(b)
                 time
1 2019-08-21 11:52:00
2 2019-08-21 11:53:00
3 2019-08-21 11:54:00
4 2019-08-21 11:55:00
5 2019-08-21 11:56:00
6 2019-08-21 11:57:00
>   
>   result <- b
>   result$value <- approxfun(a$time,a$value)(b)
Error in .approxfun(x, y, v, method, yleft, yright, f) : 
  (list) object cannot be coerced to type 'double'

【问题讨论】:

    标签: r interpolation


    【解决方案1】:

    根据?approxfun

    函数 approxfun 返回一个对给定数据点执行(线性或常数)插值的函数。对于给定的一组 x 值,此函数将返回相应的插值。 这里的'b'是一个data.frame,可能是我们需要的

    x, y - 数值向量,给出要插值的点的坐标。

    根据描述,由于approxfun 正在返回一个函数,并且它基于一组x (numeric vector) 进行插值,因此传递data.frame 将不起作用。因此,提取特定列作为插值向量

    approxfun(a$time,a$value)(b$time)
    

    【讨论】:

    • @NelsonGon 如果您查看他显示的链接,它是approxfun(dat$Datetimes, dat$Vals)(dat2$Mins),其中创建的函数将参数作为向量。在这里,他正在使用整个数据集
    • @meolic 发生在每个人身上。
    猜你喜欢
    • 2017-08-29
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2016-05-24
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多