代码之家  ›  专栏  ›  技术社区  ›  Adrian

R: 检查多个数据框基于重复行并重新组织数据

  •  0
  • Adrian  · 技术社区  · 4 年前
    mydata <- structure(list(X1 = c(1, 1, 1, 1, 1, 1), X2 = c(1, 4, 4, 3, 2, 
    2), X3 = c(1, 2, 2, 3, 3, 3), X1 = c(-1, 1, 1, 1, -1, -1), X2 = c(1, 
    -1, -1, 1, -1, -1), X3 = c(1, -1, 1, 1, -1, -1)), class = "data.frame", row.names = c(NA, 
    -6L))
    
    values <- data.frame(rbind(c(1, -3),
                               c(-99, 20),
                               c(1, 0),
                               c(0, 0),
                               c(-9, 0.3),
                               c(-99, 11)))
    

    data.frame 是的, mydata ,和 values 我的数据

    > mydata
      X1 X2 X3 X1 X2 X3
    1  1  1  1 -1  1  1
    2  1  4  2  1 -1 -1
    3  1  4  2  1 -1  1
    4  1  3  3  1  1  1
    5  1  2  3 -1 -1 -1
    6  1  2  3 -1 -1 -1
    

    有5个独特的组:

    #1 1 1 1 -1 1 1

    1 4 2 1 -1 -1

    #3 1 4 2 1 -1 1

    #4 1 3 3 1 1 1

    1 2 3 -1 -1 -1

    > values
       X1   X2
    1   1 -3.0
    2 -99 20.0
    3   1  0.0
    4   0  0.0
    5  -9  0.3
    6 -99 11.0
    

    因此,生成的列表可能如下所示:

    > mylist
    [[1]]
    [1] 1 -3.0
    
    [[2]]
    [1] -99 20.0
    
    [[3]]
    [1] 1  0.0
    
    [[4]]
    [1] 0  0.0
    
    [[5]]
         X1     X2
    1    -9    0.3
    2   -99   11.0
    
    2 回复  |  直到 4 年前
        1
  •  1
  •   Ronak Shah    4 年前

    您可以按行粘贴这些值,并找出可用于 split 一排排的 values

    val <- do.call(paste, c(mydata, sep = '-'))
    group <- match(val, unique(val))
    split(values, group)
    
    #$`1`
    #  X1 X2
    #1  1 -3
    
    #$`2`
    #   X1 X2
    #2 -99 20
    
    #$`3`
    #  X1 X2
    #3  1  0
    
    #$`4`
    #  X1 X2
    #4  0  0
    
    #$`5`
    #   X1   X2
    #5  -9  0.3
    #6 -99 11.0