【问题标题】:Obtain unique list entries and their multiplicities in R获取 R 中的唯一列表条目及其多重性
【发布时间】:2012-04-02 19:50:51
【问题描述】:

给定一个列表,我试图创建一个删除重复列表条目的新列表,但也希望存储每个唯一列表条目的多重性。

例如,在下面的列表中,我想获取三个元素的列表:character(0)、“11”、“33”、“44”及其对应的重数分别为 2、2 和 1:

> list

[[1]]

character(0)

[[2]]

"11" 

[[3]]

"11" 

[[4]]

character(0)

[[5]]

"33" "44"

【问题讨论】:

    标签: r list


    【解决方案1】:

    您可以使用unique 获取唯一条目,使用tablematch 获取频率:

    #create list
    l <- list(character(0),"11","11",character(0),c("33","44"))
    
    #unique elements
    ul <- unique(l)
    ul
    [[1]]
    character(0)
    
    [[2]]
    [1] "11"
    
    [[3]]
    [1] "33" "44"
    
    #get frequencies
    table(match(l,ul))
    
    1 2 3 
    2 2 1 
    

    【讨论】:

    • 谢谢!这种方法有效,但我担心它的速度。 unique() 和 match() 不是很慢吗?
    • @SAT 他们调用.Internal 函数,根据帮助,这很神奇!但说真的,我认为它的编译代码可能会尽可能快。列表的普遍性意味着无法依赖某些优化所需的假设
    • 鉴于 R 文档中的描述,我认为 match 在这里不会起作用:“match 在其第二个参数中返回其第一个参数的(第一个)匹配位置的向量”
    • @SAT 第二个参数是唯一的,因此其中的所有内容都将匹配(即多对一映射),这就是为什么表可以计算第一个向量中所有项目出现的原因.
    • 我正在尝试对 u1 的每个元素使用 length(which(l == u1))。我怎样才能将它矢量化?
    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2010-11-26
    • 2023-01-27
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多