【问题标题】:r locf multiple columns and group byr locf 多列和分组依据
【发布时间】:2020-04-23 20:16:05
【问题描述】:

我的问题由两部分组成: 首先,我想使用类似于下面的数据框执行最后一次观察(或完整)。因此,应创建缺失的年/月,随后应结转 X1 和 X2 的值。

set.seed(1)
df <- data.frame(year = sort(rep(c(2018,2019),4)),
                 month = c(1,2,5,8,1,2,3,6),
                 X1 = sort(sample(1:100,8)),
                 X2 = sort(sample(1:100,8)))

期望的输出应该是:

   year month X1 X2
1  2018     1 20  7
2  2018     2 27 18
3  2018     3 27 18
4  2018     4 27 18
5  2018     5 37 21
6  2018     6 37 21
7  2018     7 37 21
8  2018     8 57 37
9  2018     9 57 37
10 2018    10 57 37
11 2018    11 57 37
12 2018    12 57 37
13 2019     1 62 47
14 2019     2 86 63
15 2019     3 89 66
16 2019     4 89 66
17 2019     5 89 66
18 2019     6 97 73
19 2019     7 97 73
20 2019     8 97 73
21 2019     9 97 73
22 2019    10 97 73
23 2019    11 97 73
24 2019    12 97 73

此外,我还有一些我想分组的变量。因此,如果我有一个名为“组”的变量,由值 1 和 2 组成,我希望对两个组分别执行上述 LOCF。

【问题讨论】:

    标签: r locf


    【解决方案1】:

    种子为我返回不同的数据,但我认为您尝试做的是 completefill 的组合

    library(tidyr)
    df %>% complete(year, month = 1:12) %>% fill(X1, X2)
    

    【讨论】:

    • 谢谢!这适用于我发布的示例,但我的实际数据框有更多变量,并且您的解决方案的结果与我用于输入的数据框相同(因此之前和之后是相同的)。您对此有解决方案吗?另外,你对我最后发布的分组问题有什么建议吗?
    • @Joep_S 不确定我是否完全理解。如果您有很多列要填写,您可以使用 fill(everything()) 并且您需要将结果分配回去。您也可以按组填写。尝试df1 &lt;- df %&gt;% complete(year, month = 1:12) %&gt;% group_by(group_column) %&gt;% fill(everything()),然后检查df1。如果它不起作用,如果您可以使用 dput 共享数据,我们可以重现您面临的相同问题,这将很有帮助。
    猜你喜欢
    • 2019-11-13
    • 1970-01-01
    • 2021-11-04
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多