使用dplyr进行线性插值

松弛线

我正在尝试使用库中na.approx()zoo函数(与结合使用xts)对多个测量值的多个个体的重复测量数据中的缺失值进行插值。

样本数据...

event.date <- c("2010-05-25", "2010-09-10", "2011-05-13", "2012-03-28", "2013-03-07",    
                "2014-02-13", "2010-06-11", "2010-09-10", "2011-05-13", "2012-03-28",
                "2013-03-07", "2014-02-13")
variable   <- c("neck.bmd", "neck.bmd", "neck.bmd", "neck.bmd", "neck.bmd", "neck.bmd",
                "wbody.bmd", "wbody.bmd", "wbody.bmd", "wbody.bmd", "wbody.bmd", "wbody.bmd")
value      <- c(0.7490, 0.7615, 0.7900, 0.7730, NA, 0.7420, 1.0520, 1.0665, 1.0760,
                1.0870, NA, 1.0550)
## Bind into a data frame
df <- data.frame(event.date, variable, value)
rm(event.date, variable, value)
## Convert date
df$event.date <- as.Date(df$event.date)
## Load libraries
library(magrittr)
library(xts)
library(zoo)

我可以使用xts()na.approx()...为给定的人为单个结果插值一个缺失的数据点。

## Subset one variable
wbody <- subset(df, variable == "wbody.bmd")
## order/index and then interpolate
xts(wbody$value, wbody$event.date) %>%
  na.approx()
2010-06-11 1.052000
2010-09-10 1.066500
2011-05-13 1.076000
2012-03-28 1.087000
2013-03-07 1.070977
2014-02-13 1.055000

返回矩阵不理想,但是我可以解决这个问题。不过,我的主要问题是,对于多个人来说,我有多种结果。我可能天真地认为,由于这是一个拆分应用组合问题,因此我可以dplyr通过以下方式利用它来实现这一目标...

## Load library
library(dplyr)
## group and then arrange the data (to ensure dates are correct)
df %>%
  group_by(variable) %>%
    arrange(variable, event.date) %>%
      xts(.$value, .$event.date) %>%
        na.approx()

Error in xts(., .$value, .$event.date) : order.by requires an appropriate time-based object

似乎dplyr不能很好地与xts/配合使用,zoo并且我花了几个小时进行搜索,以查找有关如何对R中缺少的数据点进行插值的教程/示例,但是到目前为止,我发现的只是单个案例的示例我一直无法找到有关如何为多个人在多个站点上执行此操作的任何信息(我意识到可以通过将数据重塑为更广泛的范围来解决多人问题,但这仍然无法解决我遇到的问题)。

任何有关如何进行的想法/建议/见解将不胜感激。

谢谢

编辑:澄清某些功能来自zoo程序包。

松弛线

我所使用的解决方案基于@docendodiscimus的第一条评论

无需像我一直在尝试的那样创建新的数据框,而是利用dplyrmutate()功能,只需在现有数据框中添加列即可

我的代码现在是...

df %>%
  group_by(variable) %>%
    arrange(variable, event.date) %>%
      mutate(ip.value = na.approx(value, maxgap = 4, rule = 2))

maxgap允许高达四个连续NA的,而rule选项允许外推到侧翼的时间点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用dplyr进行线性插值,但跳过所有缺失值的组

来自分类Dev

线性插值

来自分类Dev

线性插值优化

来自分类Dev

数据的线性插值

来自分类Dev

如何进行平行双线性插值

来自分类Dev

Python使用线性插值对不规则时间序列进行正则化

来自分类Dev

使用c / awk / shell对2d数据进行双线性插值

来自分类Dev

熊猫数据框:使用线性插值重新采样

来自分类Dev

用J. Wu的快速线性插值方法在Matlab中进行图像插值

来自分类Dev

值之间的线性插值

来自分类Dev

将时间序列向量的长度设置为相等(使用线性插值对它们进行大小调整/缩放)

来自分类Dev

线性插值中的布尔逻辑

来自分类Dev

MySQL的PHP线性插值表

来自分类Dev

Keras中的线性插值

来自分类Dev

执行“在线”线性插值

来自分类Dev

PromQL或MetricsQL中的线性插值

来自分类Dev

如何提高线性插值的性能

来自分类Dev

线性插值无法正常工作

来自分类Dev

如何避免线性插值的“陷阱”?

来自分类Dev

如何使用线性插值来插补丢失的时间序列数据?

来自分类Dev

如何在缺少值的行中动态地对数据进行线性插值?

来自分类Dev

如何对双线性插值产生的轮廓图进行动画处理?

来自分类Dev

如何对双线性插值产生的轮廓图进行动画处理?

来自分类Dev

如何在BigQuery中使用线性插值填充不规则的缺失值?

来自分类Dev

Python 中的线性插值但使用列标题作为索引值

来自分类Dev

使用线性插值法将NA值插值到一个变量中

来自分类Dev

使用双线性插值调整图像大小,而无需调整大小

来自分类Dev

在CDO中使用双线性插值重新栅格化NetCDF文件

来自分类Dev

在CDO中使用双线性插值重新栅格化NetCDF文件

Related 相关文章

热门标签

归档