【问题标题】:How do I move part of a row to a new row in R? [duplicate]如何将一行的一部分移动到 R 中的新行? [复制]
【发布时间】:2020-10-17 11:02:00
【问题描述】:

我有一个问题,我不知道是否有出路。我有一个需要操作的大型电子表格(20000 行和 500 列),当数据应该被放入第二行和第三行时,它被放入了额外的列中。 每个条目跨越一个大行,而不是应有的 3 个小行。所以现在我需要在每个现有行之后创建两个新行。然后取出 C-H 到 C-L 列中的数据,并将其移动到以下行。

C-A  C-B  C-C  C-D  C-E  C-F  C-G  C-H  C-I  C-J  C-K  C-L 
A1   A2   A3   A4   A5   A6   A7   A8   A9   A10  A11  A12
B1   B2   B3   B4   B5   B6   B7   B8   B9   B10  B11  B12

如何将 C-H 到 C-L 中的观察结果移动到包含一些现有数据的新行,使其看起来像这样:

C-A  C-B  C-C  C-D  C-E  C-F  C-G  C-H  C-I  C-J  C-K  C-L 
A1   A2   A3   A4   A5   A6   
A1   A2   A3   A7   A8   A9
A1   A2   A3   A10  A11  A12
B1   B2   B3   B4   B5   B6   
B1   B2   B3   B7   B8   B9
B1   B2   B3   B10  B11  B12

以此类推,直到 20,000 行变为 60,000 行。有什么可以帮我的吗?

提前谢谢你!

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    一种方法是获取长格式数据,创建一组 3 个值,然后再次获取宽格式数据。

    library(dplyr)
    library(tidyr)
    
    df %>%
      pivot_longer(cols = -(`C-A`:`C-C`)) %>%
      group_by(`C-A`, `C-B`, `C-C`) %>%
      mutate(grp = ceiling(row_number()/3), 
             name = rep(paste0('col', 1:3), length.out = n())) %>%
      pivot_wider() %>%
      ungroup %>%
      select(-grp)
    
    # `C-A` `C-B` `C-C` col1  col2  col3 
    #  <chr> <chr> <chr> <chr> <chr> <chr>
    #1 A1    A2    A3    A4    A5    A6   
    #2 A1    A2    A3    A7    A8    A9   
    #3 A1    A2    A3    A10   A11   A12  
    #4 B1    B2    B3    B4    B5    B6   
    #5 B1    B2    B3    B7    B8    B9   
    #6 B1    B2    B3    B10   B11   B12  
    

    数据

    df <- structure(list(`C-A` = c("A1", "B1"), `C-B` = c("A2", "B2"), 
        `C-C` = c("A3", "B3"), `C-D` = c("A4", "B4"), `C-E` = c("A5", 
        "B5"), `C-F` = c("A6", "B6"), `C-G` = c("A7", "B7"), `C-H` = c("A8", 
        "B8"), `C-I` = c("A9", "B9"), `C-J` = c("A10", "B10"), `C-K` = c("A11", 
     "B11"), `C-L` = c("A12", "B12")), class = "data.frame", row.names = c(NA, -2L))
    

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2020-11-05
      • 2014-12-14
      • 2016-06-15
      • 2021-12-22
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多