r语言 - 将一行替换为许多基于对象更改列值的行



我试图找到这个简单问题的答案,但没有任何运气。

假设我有:

A <- c(1101,1102,1103)

以及如下所示的数据帧:

t    m    com   x
1    1    1101  10
1    1    1102  15
1    1    1103  20
1    2    NA    NA
1    3    1101  20
1    3    1102  25
1    3    1103  30
1    4    NA    NA
1    5    1101  25
1    5    1102  30
1    5    1103  35

由于我想做的是 X 与 na.approx 的线性插值(实际数据帧和对象要大得多),我需要数据帧看起来像这样:

t    m    com   x
1    1    1101  10
1    1    1102  15
1    1    1103  20
1    2    1101  NA
1    2    1102  NA
1    2    1103  NA
1    3    1101  20
1    3    1102  25
1    3    1103  30
1    4    1101  NA
1    4    1102  NA
1    4    1103  NA
1    5    1101  25
1    5    1102  30
1    5    1103  35

我还没有为此尝试任何代码,因为我不知道从哪里开始。

您认为有用的任何帮助和/或 r 材料都会很棒。

谢谢

您需要的功能是tidyr::complete()

  1. 由于您想在m组中"扩展"列com,因此您需要先group_by(m)
  2. 然后使用向量Acompletecom列。
  3. 在这种情况下,默认情况下,t列将填充NA,我们可以使用上一行中的值fill()t(因为您说您有一个大型数据集,这应该比在complete()中设置fill参数更好)。
  4. 然后删除com列中的任何NA(这些是数据集中的原始NA)。
  5. 最后,将列重新排序回其原始位置。
library(tidyverse)
A <- c(1101,1102,1103)
df %>% 
group_by(m) %>% 
complete(com = A) %>% 
fill(t, .direction = "up") %>% 
drop_na(com) %>% 
select(t, m, com, x)
# A tibble: 15 x 4
# Groups:   m [5]
t     m   com     x
<int> <int> <dbl> <int>
1     1     1  1101    10
2     1     1  1102    15
3     1     1  1103    20
4     1     2  1101    NA
5     1     2  1102    NA
6     1     2  1103    NA
7     1     3  1101    20
8     1     3  1102    25
9     1     3  1103    30
10     1     4  1101    NA
11     1     4  1102    NA
12     1     4  1103    NA
13     1     5  1101    25
14     1     5  1102    30
15     1     5  1103    35

相关内容

  • 没有找到相关文章

最新更新