【问题标题】:How to calculate how many times vector appears in a list? in R如何计算向量在列表中出现的次数?在 R 中
【发布时间】:2013-04-04 17:54:45
【问题描述】:

我有一个包含 10,000 个向量的列表,每个向量可能有不同的元素和不同的长度。我想知道我有多少个唯一向量以及每个唯一向量出现在列表中的频率。

我想要走的路是函数“唯一”,但我不知道如何使用它来获取每个向量的重复次数。

所以我想得到的是这样的:

“a”“b”“c”d”301

“一”277

"b" c" 49

作为字母、每个唯一向量的内容和数字,重复频率。

我非常感谢任何可能的帮助。

非常感谢您。

蒂娜。

【问题讨论】:

    标签: r list vector


    【解决方案1】:

    也许你应该看看table

    一些示例数据:

    myList <- list(A = c("A", "B"),
                   B = c("A", "B"),
                   C = c("B", "A"),
                   D = c("A", "B", "B", "C"),
                   E = c("A", "B", "B", "C"),
                   F = c("A", "C", "B", "B"))
    

    将你的向量粘贴在一起并制成表格。

    table(sapply(myList, paste, collapse = ","))
    # 
    #     A,B A,B,B,C A,C,B,B     B,A 
    #       2       2       1       1 
    

    您没有指定顺序是否重要(即 A、B 是否与 B、A 相同)。如果是这样,您可以尝试以下方法:

    table(sapply(myList, function(x) paste(sort(x), collapse = ",")))
    # 
    #     A,B A,B,B,C 
    #       3       3 
    

    将其包装在 data.frame 中以获得垂直输出而不是水平输出,这可能更易于阅读。


    此外,请务必按照已向您建议的方式阅读 How to make a great R reproducible example?

    事实上,我只是猜测你想要做什么。

    【讨论】:

    • 请问rle(sort(sapply(myList, paste, collapse = ","))) 会更慢还是更快? R 中的 TIMTOWDI 让我大吃一惊……[明天我总是可以尝试一些玩具示例,是的……但也许这很微不足道]
    • @vodka,不知道。尝试使用 rbenchmark 或 microbenchmark 包运行一些基准测试。
    • 使用表格更快:在 6000 个元素的列表中,15.734 对 20.212。
    • @vodka,感谢您的测试。在 R 中确实有很多不同的方法来做事,但这是我喜欢关于 R 的一点。不知道我是否会在 5 秒内失去任何睡眠 :)
    • 我很喜欢 perl 的 TIMTOWTDIness……现在,只要我刚从 R 开始,我有时会感到有点失落,也许是由于它的不同方法,总的来说,尊重到标准的命令式/oop 编程。在这种情况下,差异并不大(有 6000 个元素),但我正在尝试了解所有性能问题,因为我看到了巨大差异的示例。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-12-13
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多