【问题标题】:Replacing elements of a list with those from another list based on name根据名称将列表中的元素替换为另一个列表中的元素
【发布时间】:2020-01-09 20:04:29
【问题描述】:

我正在尝试使用命名索引来替换列表中的某些元素。

我有三个列表:

  • 超集
  • 子集
  • 子集名称

我的目标是将 Superset 中的旧元素替换为 Subset 中的相应元素,其中 Name(Subset) == Name(Superset)。

示例代码(为正确而编辑):

# Setting things up
Superset <- list(1, 2, 3, 4)
names(Superset) <- c("a", "b", "c", "d")

Subset <- list(5, 6)
names(Subset) <- c("b", "c") # or any names from Superset

SubsetNames <- as.list(names(Subset))

我尝试过这样的事情:

lapply(SubsetNames, FUN=function(x) Superset[[x]] <- Subset[[x]])

还有:

Superset[SubsetNames] <- Subset

我什至尝试用计数器构造一个 for 循环,但是在我的场景中这不是一个可行的解决方案。

实际上,Superset 是一个数据帧列表,每个数据帧在 117 列中有近 90k 个数据点。 其中一些数据框需要一些调整。我有代码可以成功提取需要调整的列表并对其进行调整......现在我只需要将它们放回去。

非常感谢您的帮助!谢谢!

【问题讨论】:

    标签: r list dataframe lapply


    【解决方案1】:

    我们可以使用“子集”的names 来子集“超集”并将其分配给“子集”的值

    Superset[names(Subset)] <- Subset
    Superset
    #$a
    #[1] 1
    
    #$b
    #[1] 5
    
    #$c
    #[1] 6
    
    #$d
    #[1] 4
    

    list 创建似乎有问题。应该是as.list

    Superset <- as.list(1:4)
    

    它将返回listlength 4,而不是length 1 和list(1:4)

    【讨论】:

    • 感谢您指出错误。我在 RStudio 中重新运行了代码,并用正在运行的内容更新了问题。
    • 也谢谢你的回答!!! Superset[names(Subset)] &lt;- Subset 适用于我的示例代码!
    • @SwiftArrow 现在你不必要地转换为listSubsetNames &lt;- as.list(names(Subset))
    • 由于某种原因我没有那个错误,把它放进去让它工作。
    【解决方案2】:

    如果你想改变子集中的每个值,你可以这样做

    modifyList(Superset, Subset)
    

    或者如果您只是从子集中更新一组较小的值

    modifyList(Superset, Subset[SubsetNames])
    

    【讨论】:

      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 2021-07-16
      • 2018-10-08
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2021-05-19
      • 2018-07-14
      相关资源
      最近更新 更多