【问题标题】:Adding data to a data.frame to complete a sequence [duplicate]将数据添加到data.frame以完成序列[重复]
【发布时间】:2017-12-15 23:50:46
【问题描述】:

下面包含的数据,其中的第一位看起来像

head(dat, 9)
      IndID BinID Freq
1 BHS_034_A     7   20
2 BHS_034_A     8   27
3 BHS_034_A     9   67
4 BHS_034_A    10  212
5 BHS_037_A     5    1
6 BHS_037_A     7   12
7 BHS_037_A     8   65
8 BHS_037_A     9  122
9 BHS_037_A    10  301

我想填写缺少的 BinID 数字,以便所有个人 (IndID) 都有一个从 1 到 10 的 BinID 序列。当添加 BinID 的新值时,Freq 的值应该为 0 .

我希望能容纳很多人,但这里只包括了几个人。

这个问题与another post 类似,但在这里我也尝试在填充的列中添加 0。

数据:

dat <- structure(list(IndID = c("BHS_034_A", "BHS_034_A", "BHS_034_A", 
"BHS_034_A", "BHS_037_A", "BHS_037_A", "BHS_037_A", "BHS_037_A", 
"BHS_037_A", "BHS_068_A", "BHS_068_A", "BHS_068_A", "BHS_068_A", 
"BHS_068_A", "BHS_068_A", "BHS_068_A", "BHS_070_A", "BHS_070_A", 
"BHS_070_A", "BHS_071_A", "BHS_071_A", "BHS_071_A", "BHS_071_A", 
"BHS_071_A", "BHS_071_A", "BHS_071_A", "BHS_071_A", "BHS_071_A"
), BinID = c(7L, 8L, 9L, 10L, 5L, 7L, 8L, 9L, 10L, 3L, 4L, 5L, 
7L, 8L, 9L, 10L, 8L, 9L, 10L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L), Freq = c(20L, 27L, 67L, 212L, 1L, 12L, 65L, 122L, 301L, 
2L, 1L, 1L, 4L, 14L, 104L, 454L, 7L, 90L, 470L, 6L, 11L, 11L, 
7L, 18L, 19L, 15L, 31L, 344L)), .Names = c("IndID", "BinID", 
"Freq"), row.names = c(NA, 28L), class = "data.frame")

【问题讨论】:

    标签: r data.table dplyr


    【解决方案1】:

    tidyr 提供了完整的功能,可让您在数据集中查找缺失的组合:

    tidyr::complete(dat, IndID, BinID = 1:10)
    

    【讨论】:

    • 对我来说很棒的新功能!
    • 并且使用 fill 参数,可以填写 0 而不是 NA。 `fill = list(Freq = 0)).
    【解决方案2】:

    使用:

    library(data.table)
    setDT(dat)[CJ(BinID = 1:10, IndID = IndID, unique = TRUE), on = .(IndID, BinID)]
    

    或者:

    library(dplyr)
    library(tidyr)
    dat %>% 
      group_by(IndID) %>% 
      expand(BinID = 1:10) %>% 
      left_join(., dat)
    

    给予:

            IndID BinID Freq
     1: BHS_034_A     1   NA
     2: BHS_037_A     1   NA
     3: BHS_068_A     1   NA
     4: BHS_070_A     1   NA
     5: BHS_071_A     1   NA
     6: BHS_034_A     2   NA
     7: BHS_037_A     2   NA
     8: BHS_068_A     2   NA
     9: BHS_070_A     2   NA
    10: BHS_071_A     2    6
    11: BHS_034_A     3   NA
    12: BHS_037_A     3   NA
    13: BHS_068_A     3    2
    14: BHS_070_A     3   NA
    15: BHS_071_A     3   11
    16: BHS_034_A     4   NA
    17: BHS_037_A     4   NA
    18: BHS_068_A     4    1
    19: BHS_070_A     4   NA
    20: BHS_071_A     4   11
    21: BHS_034_A     5   NA
    22: BHS_037_A     5    1
    23: BHS_068_A     5    1
    24: BHS_070_A     5   NA
    25: BHS_071_A     5    7
    26: BHS_034_A     6   NA
    27: BHS_037_A     6   NA
    28: BHS_068_A     6   NA
    29: BHS_070_A     6   NA
    30: BHS_071_A     6   18
    31: BHS_034_A     7   20
    32: BHS_037_A     7   12
    33: BHS_068_A     7    4
    34: BHS_070_A     7   NA
    35: BHS_071_A     7   19
    36: BHS_034_A     8   27
    37: BHS_037_A     8   65
    38: BHS_068_A     8   14
    39: BHS_070_A     8    7
    40: BHS_071_A     8   15
    41: BHS_034_A     9   67
    42: BHS_037_A     9  122
    43: BHS_068_A     9  104
    44: BHS_070_A     9   90
    45: BHS_071_A     9   31
    46: BHS_034_A    10  212
    47: BHS_037_A    10  301
    48: BHS_068_A    10  454
    49: BHS_070_A    10  470
    50: BHS_071_A    10  344
    

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 2023-03-22
      • 2017-07-09
      • 2015-02-12
      • 2018-10-14
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多