【问题标题】:Transposing and Filling NAs in RR中的转置和填充NA
【发布时间】:2023-06-09 21:17:02
【问题描述】:

我的 data.frame df1 看起来像这样:

A NA NA B NA NA C NA NA
1  2  3 4  5  6 7  8  9 

我希望它看起来像这样:

A 1
A 2
A 3
B 4
B 5
B 6
C 7
C 8
C 9

有什么想法吗?

【问题讨论】:

    标签: r tidyr data-manipulation spread


    【解决方案1】:

    假设你有一个这样的data.frame:

    df <- data.frame(matrix(c("A", NA, NA, "B", NA, NA, "C", NA, NA, 1:9), byrow = TRUE, nrow = 2))
    
    > df
      X1   X2   X3 X4   X5   X6 X7   X8   X9
    1  A <NA> <NA>  B <NA> <NA>  C <NA> <NA>
    2  1    2    3  4    5    6  7    8    9
    

    使用tidyr

    df %>%
      t() %>% 
      as.data.frame() %>%
      fill(V1, .direction = "down")
    

    给你

      V1 V2
    1  A  1
    2  A  2
    3  A  3
    4  B  4
    5  B  5
    6  B  6
    7  C  7
    8  C  8
    9  C  9
    

    【讨论】:

      【解决方案2】:

      na.locf 的选项来自zoo

      library(zoo)
      na.locf(as.data.frame(t(df)))
      #   V1 V2
      #X1  A  1
      #X2  A  2
      #X3  A  3
      #X4  B  4
      #X5  B  5
      #X6  B  6
      #X7  C  7
      #X8  C  8
      #X9  C  9
      

      数据

      df <- data.frame(matrix(c("A", NA, NA, "B", NA, NA, "C", NA, NA, 1:9),
      byrow = TRUE, nrow = 2))
      

      【讨论】: