如何使用dplyr对每个组中具有相同数量插值点的数据框中的分组数据进行扩展和插值?

盈泰

我想按组对数据框中的值进行插值,以使每个组具有相同数量的数据点。

到目前为止,我已经尝试了关于expand()和na.approx()函数的一些事情,但是没有成功。

通过一个示例最容易理解:我想转换此数据框:

> df.test
  ID  x   y
1  A  0 9.0
2  A  2 8.0
3  B 10 1.0
4  B 20 1.5
5  B 30 3.0

对此

> df.test.result
# A tibble: 10 x 3
   ID        x     y
   <fct> <dbl> <dbl>
 1 A       0    9   
 2 A       0.5  8.75
 3 A       1    8.5 
 4 A       1.5  8.25
 5 A       2    8   
 6 B      10    1   
 7 B      15    1.25
 8 B      20    1.5 
 9 B      25    2.25
10 B      30    3 

这个想法是在A和B组中分别创建5个数据点,其中缺失的y值由线性插值确定。例如,对于组“ B”,它应该在x = 15,x = 25(已经有10,20,30的位置)处进行插值以获得5分。为了获得x = 15,它应该线性内插最接近的数据点的y值(在这种情况下,x = 10和x = 20)。并且在此示例中x = 15位于两者的中间,这将得出(x,y)=(15,1.25)。

首先,我扩展了组(以接收y列中的NA以便稍后插入)

  df.test.expand <- df.test %>%
                      group_by(ID) %>%
                      expand(x=full_seq(x,1)) %>% 
                      ungroup() %>% 
                      left_join(df.test) 

但是x列总是增加1,而每个组的样本量却不相同(例如5个元素)。

还有其他更直接的方法可以执行此插值吗?

我想这是一个普遍的问题,在dplyr中应该很简单。

感谢您的帮助!

tmfmnk

一种可能是:

df %>%
 group_by(ID) %>%
 summarise_all(~ list(seq(first(.), last(.), len = 5))) %>%
 unnest()

   ID        x     y
   <chr> <dbl> <dbl>
 1 A       0    9   
 2 A       0.5  8.75
 3 A       1    8.5 
 4 A       1.5  8.25
 5 A       2    8   
 6 B      10    1   
 7 B      15    1.5 
 8 B      20    2   
 9 B      25    2.5 
10 B      30    3

要执行线性插值(也使用zoo):

df %>%
 group_by(ID) %>%
 complete(x = seq(first(x), last(x), len = 5)) %>%
 mutate(y = na.approx(y))

   ID        x     y
   <chr> <dbl> <dbl>
 1 A       0    9   
 2 A       0.5  8.75
 3 A       1    8.5 
 4 A       1.5  8.25
 5 A       2    8   
 6 B      10    1   
 7 B      15    1.25
 8 B      20    1.5 
 9 B      25    2.25
10 B      30    3 

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R中插值数据框点

在Yesod / Haskell中,如何使用具有可变插值功能的IO数据?

如何使数据框中的每个组具有相同的大小?

按组扩展缺少日期的数据框并进行插值

使用插值函数填充 Pandas 数据框中的 NaN

如何使用循环插值面板数据中的值

如何在两个独立的熊猫数据框中的所有值之间插值?

使用整体数据中的比率进行插值

对 Pandas 数据框中的条目进行分组,其中行具有相同的值

Pandas - 在数据框中对具有相同值的行进行分组

使用interp1d在数据框中按行进行插值

使用R中具有相同值的外部数据框对数据框进行排序

如何从图形数据中删除所有可以线性插值的点?

基于数据框中唯一值的插值

如何“拉伸”我的数据框并在现有值之间进行插值

如何在 R 中具有多个分组变量的整洁数据集中转换/重新采样/插值数据以标准化可变长度?

ng-grid:如何使用范围函数对表中的数据进行插值?

Python pandas数据框:使用数据框数据进行插值而不更新它。只需获取插值即可。

为 dplyr 中的每个组创建具有相同样本大小的数据框

使用TensorFlow对图像中的点进行插值采样

如何对分类数据进行插值

熊猫在数据框中向后插值()

如何对R中相同的两列具有不同值的数据框进行子集

在具有R的面板中插值高于最大值的数据

在MATLAB中对分散的数据进行插值

如何使用numpy在列表中的值对之间进行插值

如何在R中对黄土光滑以上的点进行插值和提取?

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

如何仅更改熊猫数据框中仅具有一定数量的总和的组的最大值