【问题标题】:How to make conditional merging on a list of lists in R?如何对 R 中的列表进行条件合并?
【发布时间】:2020-08-16 10:27:26
【问题描述】:

我有一个清单。
我想成对比较元素,然后在满足条件时合并元素
示例列表:

[[1]]
[1] "466" "1758" "975"

[[2]]
[1] "1528" "185"  "975" 

[[3]]
[1] "1528" "185"  "975" 

[[4]]
[1] "2892" "758"  "971" 

[[5]]
[1] "1321" "274"  "969" 

[[6]]
[1] "1321"  "274" "969" 

[[7]]
[1] "115"  "1321" "969" 

[[8]]
[1] "1321" "441"  "969" 

[[9]]
[1] "504" "61"  "948"

[[10]]
[1] "504"  "61" "948" 

假设条件很简单:如果元素 1 等于元素 2,则合并它们并从列表中删除第二个元素。

预期输出:

[[1]]
[1] "466" "1758" "975"

[[2]]
[1] "1528" "185"  "975" "1528" "185"  "975" 

[[3]]
[1] "2892" "758"  "971" 

[[4]]
[1] "1321" "274"  "969" "1321"  "274" "969" 

[[5]]
[1] "115"  "1321" "969" 

[[6]]
[1] "1321" "441"  "969" 

[[7]]
[1] "504" "61"  "948" "504"  "61" "948" 

谢谢

【问题讨论】:

    标签: r list function merge


    【解决方案1】:

    我们可以使用duplicated 创建一个逻辑索引,从list 中提取元素并与Map 连接,更新list 并根据索引仅提取那些元素

    i1 <- duplicated(lst1)
    i2 <- duplicated(lst1, fromLast = TRUE)
    lst2 <- lst1
    lst2[i1] <- Map(c, lst1[i1], lst1[i2])
    lst2[!i2]
    #[[1]]
    #[1] "466"  "1758" "975" 
    
    #[[2]]
    #[1] "1528" "185"  "975"  "1528" "185"  "975" 
    
    #[[3]]
    [#1] "2892" "758"  "971" 
    
    #[[4]]
    #[1] "1321" "274"  "969"  "1321" "274"  "969" 
    
    #[[5]]
    #[1] "115"  "1321" "969" 
    
    #[[6]]
    #[1] "1321" "441"  "969" 
    
    #[[7]]
    #[1] "504" "61"  "948" "504" "61"  "948"
    

    或使用split

    lst2[i1] <- lapply(split(lst1[i1|i2], lst1[i1|i2], drop = TRUE), unlist)
    

    数据

    lst1 <- list(c("466", "1758", "975"), c("1528", "185", "975"), c("1528", 
    "185", "975"), c("2892", "758", "971"), c("1321", "274", "969"
    ), c("1321", "274", "969"), c("115", "1321", "969"), c("1321", 
    "441", "969"), c("504", "61", "948"), c("504", "61", "948"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2020-09-09
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      相关资源
      最近更新 更多