【问题标题】:sorting an array of lists based and counting duplicate elements -R对基于列表的数组进行排序并计算重复元素 -R
【发布时间】:2016-03-27 10:10:00
【问题描述】:

我有一个列表向量(实际上是一个二维数组)。这些列表包含某些 ID,并且 ID 的数量因列表而异。我想根据列表(第一个 ID -> 第二个 ID -> .. 等等)对向量进行排序。我还想找出向量中出现的重复次数。 (在任何排列中,重复项都是不同列表中的相同 ID)。 例如:

vec = c( list(c(1,2)),list(c(1,2,3)),list(c(1,2)),list(c(2,3)),list(c(1,3,2)) )
vec
[[1]]
[1] 1 2

[[2]]
[1] 1 2 3

[[3]]
[1] 1 2

[[4]]
[1] 2 3

[[5]]
[1] 1 3 2

我希望输出对列表进行排序并提供重复项的数量。因此,输出必须按以下顺序排列: [[1]] -> [[2]] -> [[4]] 频率为 (2,2,1)。

【问题讨论】:

  • 您能否提供一个可重现的小示例和基于此的预期输出。
  • 请考虑阅读How to Ask 以及如何生成reproducible example
  • 输出不清楚。为什么第二个元素 1 2 3 出现在 2 3 即第 4 个元素之前,我猜第 5 个元素 1 3 2 也应该排序以获得频率?
  • 首先,删除重复项。因此 1 3 2 被删除,因为它与 1 2 3 具有相同的元素。我们剩下 [[1]]、[[2]] 和 [[4]]。然后我们按元素的顺序升序排序(比较所有第一个元素,然后是第二个,然后是第三个)。因此顺序。

标签: arrays r list sorting duplicates


【解决方案1】:

我们可以试试

l1 <- lapply(vec, sort)
l2 <- l1[!duplicated(l1)]
l3 <- lapply(l2, `length<-`, min(lengths(l2)))
i4 <- order(as.numeric(sapply(l3, paste, collapse='')))
l2[i4]

获取频率

table(sapply(l1, paste, collapse=''))[i4]

【讨论】:

  • 非常感谢。如何计算每个唯一条目的重复数?
  • @James1991 更新了帖子,也许有帮助。
  • 再次感谢。这很有帮助。最后一件事。如果列表包含字母数字值而不是数字怎么办?然后 as.numeric() 将返回 NA。但是我仍然需要根据列表顺序对其进行排序。再次感谢。 @akrun
  • @James1991 在这种情况下使用library(gtools) 而不是转换为“数字”尝试i4 &lt;- mixedorder(sapply(l3, paste, collapse=''))
  • 跟进类似类型的问题,我如何将这个列表向量从 R 写入 csv 文件?提前致谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多