【问题标题】:R: check multiple data.frame based on duplicated rows and re-organize dataR:根据重复的行检查多个data.frame并重新组织数据
【发布时间】:2021-01-23 03:43:52
【问题描述】:
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)))

我有 2 个 data.frames、mydatavalues。两个 data.frames 都有 6 行。首先,我想识别 mydata 中的唯一行。

> 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

#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

对于这 5 个组中的每一个,我想创建一个长度为 5 的新列表,每个唯一组一个,并存储来自 values 的相应行。

> 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

【问题讨论】:

    标签: r list dataframe


    【解决方案1】:

    您可以逐行粘贴值并找出可用于splitvalues 的行的唯一组。

    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
    

    【讨论】:

    • 是否可以跟踪组?即,按相应的顺序命名每个列表? 1 1 1 -1 1 11 4 2 1 -1 -1 等。或者其他方式让我知道哪个是哪个?
    • 您可以将group 向量分配给您的mydatavaluesmydata$group &lt;- groupvalues$group &lt;- group.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2019-02-09
    相关资源
    最近更新 更多