【问题标题】:How to constrain duplicate removal for specific data.frame in the list more elegantly?如何更优雅地约束列表中特定 data.frame 的重复删除?
【发布时间】:2016-11-10 10:22:02
【问题描述】:

我在列表中有 data.frame 对象作为自定义函数的输出,我打算只对第一个 data.frame 对象进行重复删除,而其他的不应该受到影响。我在 lapply 函数中尝试了这个来控制这个约束,但是我有下标错误。我知道这更容易单独完成,但这对我来说并不理想。谁能指出我如何在函数式编程中更容易做到这一点?有谁知道控制列表中特定对象的约束的任何有用技巧?

小例子:

myList <- list(
  bar = data.frame(v1=c(12,21,37,21,37), v2=c(14,29,45,29,45)),
  cat = data.frame(v1=c(18,42,18,42,81), v2=c(27,46,27,46,114)),
  foo = data.frame(v1=c(3,3,33,3,33,91), v2=c(26,26,42,26,42,107))
)

这样做很容易:

.first <- unique(myList[[1L]])
res <- c(list(.first), myList[- 1L])

但我需要限制重复删除仅对第一个 data.frame 产生影响,而其他人不会删除重复项,我打算以更优雅的方式实现此功能。

想要的输出:

myOutput <- list(
  bar = data.frame(v1=c(12,21,37),v2=c(14,29,45)),
  cat = data.frame(v1=c(18,42,18,42,81), v2=c(27,46,27,46,114)),
  foo = data.frame(v1=c(3,3,33,3,33,91), v2=c(26,26,42,26,42,107))
)

【问题讨论】:

  • 为什么不能更新myList[[1]] &lt;- unique(myList[[1]])或者循环遍历序列lapply(seq_along(myList), function(i) if(i==1) unique(myList[[i]]) else myList[[i]])
  • 更新了我的评论
  • 谢谢,将此更新为答案,支持您的解决方案。

标签: r dataframe duplicates


【解决方案1】:

如果我们需要使用lapply,那么我们可以循环遍历list的序列,并用if/else修改list元素

lapply(seq_along(myList), function(i) if(i==1) unique(myList[[i]]) else myList[[i]])  

否则我们可以分配修改后的list元素

myList[[1]] <- unique(myList[[1]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2015-12-05
    • 2017-02-23
    • 2016-10-09
    相关资源
    最近更新 更多