【问题标题】:Expanding a column with row of NA when there is no match in R当 R 中没有匹配项时,用 NA 行扩展列
【发布时间】:2022-12-12 09:14:21
【问题描述】:

我正在尝试“清理”一个删除了许多“空”行的数据集,但是,我想要这些空行(并添加NA)。这是一个玩具数据集:

values <- rnorm(12)
data <- data.frame(ID = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5),
                   event = c("A", "B", "C", "A", "B", "A", "B", "C", "B", "A", "B", "C"),
                   value = values) #values are random

我想要的是插入缺少的行,即 ID 2 缺少组 C,4 缺少 A 和 C。预期结果如下:

data_expanded <- data.frame(ID = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5),
                   event = c("A", "B", "C", "A", "B", "C", "A", "B", "C", "A", "B", "C", "A", "B", "C"),
                   value = c(values[1:5], NA, values[6:8], NA, values[9], NA, values[10:12]))

可以将带有 NA 的行添加到数据框的末尾(不必像我提供的示例那样进行分组)。我的真实数据集有很多行,因此,一种内存高效的方法受到高度赞赏。我确实更喜欢使用 R、tidyr(或 tidyverse)的方法。

【问题讨论】:

    标签: r tidyverse expand


    【解决方案1】:

    tidyr::complete() 做你想做的:

    library(tidyr)
    
    values <- rnorm(12)
    data <- data.frame(ID = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5),
                       event = c("A", "B", "C", "A", "B", "A", "B", "C", "B", "A", "B", "C"),
                       value = values) #values are random
    
    data |> 
      complete(ID, event)
    
    #> # A tibble: 15 × 3
    #>       ID event   value
    #>    <dbl> <chr>   <dbl>
    #>  1     1 A      0.397 
    #>  2     1 B     -0.595 
    #>  3     1 C      0.743 
    #>  4     2 A     -0.0421
    #>  5     2 B      1.47  
    #>  6     2 C     NA     
    #>  7     3 A      0.218 
    #>  8     3 B     -0.525 
    #>  9     3 C      1.05  
    #> 10     4 A     NA     
    #> 11     4 B     -1.79  
    #> 12     4 C     NA     
    #> 13     5 A      1.18  
    #> 14     5 B     -1.39  
    #> 15     5 C      0.748
    

    创建于 2022-12-12 reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      相关资源
      最近更新 更多