【问题标题】:transform columns value into an ordered other dataframe in R将列值转换为 R 中的有序其他数据框
【发布时间】:2021-03-17 14:17:08
【问题描述】:

大家好,我需要帮助才能将列值转换为有序的其他数据框

这里是 df1

  Groups       Species Values Clusters
1     G1 Cattus_cattus     10 C1,C2,C3
2     G1 Cattus_cattus     10    C7,C8
3     G1 Cattus_cattus     10       C9
4     G2   Canis_lupus      2    C4,C5
5     G2   Canis_lupus      2      C24
6     G3  Griseus_lupa     90  C22,C78
7     G4  Griseus_lupa     89      C19

df1$Groups 我想创建一个有序的 df2 有 4 个空行(其中 colnames ae df1$Groupsdf1 中排序的值,例如

df2:

  rows C1 C2 C3 C7 C8 C9 C4 C5 C24 C22 C78 C19
1 row1 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
2 row2 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
3 row3 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
4 row3 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
5 row4 NA NA NA NA NA NA NA NA  NA  NA  NA  NA

有人有想法吗?

df1 数据

structure(list(Groups = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 4L
), .Label = c("G1", "G2", "G3", "G4"), class = "factor"), Species = structure(c(2L, 
2L, 2L, 1L, 1L, 3L, 3L), .Label = c("Canis_lupus", "Cattus_cattus", 
"Griseus_lupa"), class = "factor"), Values = c(10L, 10L, 10L, 
2L, 2L, 90L, 89L), Clusters = structure(c(1L, 6L, 7L, 5L, 4L, 
3L, 2L), .Label = c("C1,C2,C3", "C19", "C22,C78", "C24", "C4,C5", 
"C7,C8", "C9"), class = "factor")), class = "data.frame", row.names = c(NA, 
-7L))

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我使用强大的 data.table 包解决了这个问题。我不确定我是否理解这种操作的目的,但我认为下面的代码可以解决您的问题。

    library(data.table)
    library(stringr)
    
    df1 = structure(
      list(Groups = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 4L ), 
                              .Label = c("G1", "G2", "G3", "G4"), class = "factor"), 
           Species = structure(c(2L, 
                                 2L, 2L, 1L, 1L, 3L, 3L), 
                               .Label = c("Canis_lupus", "Cattus_cattus", 
                                          "Griseus_lupa"), class = "factor"), 
           Values = c(10L, 10L, 10L, 2L, 2L, 90L, 89L), 
           Clusters = structure(c(1L, 6L, 7L, 5L, 4L, 3L, 2L), 
                                .Label = c("C1,C2,C3", "C19", "C22,C78", "C24", "C4,C5", 
                                           "C7,C8", "C9"), class = "factor")), 
      class = "data.frame", row.names = c(NA,  -7L))
    
    setDT(df1)
    newcols = unlist(str_split(df1$Clusters, ","))
    Nrows = uniqueN(df1$Groups)
    Ncols = length(newcols)
    
    df2 = data.table( rows = paste0( "row", 1L:Nrows ) )
    
    df2[ , (newcols) := NA ]
    df2
    #>    rows C1 C2 C3 C7 C8 C9 C4 C5 C24 C22 C78 C19
    #> 1: row1 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
    #> 2: row2 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
    #> 3: row3 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
    #> 4: row4 NA NA NA NA NA NA NA NA  NA  NA  NA  NA
    

    reprex package (v1.0.0) 于 2021-03-17 创建

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多