首页 > 解决方案 > 使用 tidyr::complete 扩展数据框以填充时保留一列

问题描述

关于如何填充数据框中缺失的行,我使用了这个例子

df <- read.table(textConnection("car,year,month,country,amount
    Mazda,2012,02,JP,2344
    Ford,2012,04,US,235234
    Mazda,2012,03,JP,3455
    Mazda,2012,04,JP,43554
    Mazda,2012,05,JP,9854
    Mazda,2012,06,JP,32556
    Ford, 2013,01,US,345"), sep = ",", header = TRUE)

> df
                                       car year month country amount
1                                    Mazda 2012     2      JP   2344
2                                     Ford 2012     4      US 235234
3                                    Mazda 2012     3      JP   3455
4                                    Mazda 2012     4      JP  43554
5                                    Mazda 2012     5      JP   9854
6                                    Mazda 2012     6      JP  32556
7                                     Ford 2013     1      US    345

我使用 tidyr::complete 以这种方式填充月份和年份的缺失行:

tidyr::complete(df, car = unique(car), year = 2012:2014, month=1:12, fill=list(amount=0))

但国家迷失了。我已经阅读了 tidyr 文档,但它真的很短,并且找不到任何其他 SO 答案。

# A tibble: 108 x 5
   car                                        year month country amount
   <fct>                                     <int> <int> <fct>    <dbl>
 1 "                                   Ford"  2012     1 NA           0
 2 "                                   Ford"  2012     2 NA           0
 3 "                                   Ford"  2012     3 NA           0
 4 "                                   Ford"  2012     4 US      235234
 5 "                                   Ford"  2012     5 NA           0
 6 "                                   Ford"  2012     6 NA           0
 7 "                                   Ford"  2012     7 NA           0
 8 "                                   Ford"  2012     8 NA           0
 9 "                                   Ford"  2012     9 NA           0
10 "                                   Ford"  2012    10 NA           0
# ... with 98 more rows

如何保存它?

标签: rtidyr

解决方案


我们可以把它放在nesting

library(tidyverse)
df %>% 
  complete(car = unique(car), year = 2012:2014, month = 1:12, 
            nesting(country), fill = list(amount = 0))

推荐阅读