如何在Base R中对列表元素进行分组统计(含大列表优化方案)
列表向量元素的分组统计方案
你有一个由多个向量组成的列表,结构如下:
list(c(1,2), c('a', 'b'), c('a', 'b'), c(2,3)) -> li # 输出结构: # [[1]] # [1] 1 2 # # [[2]] # [1] "a" "b" # # [[3]] # [1] "a" "b" # # [[4]] # [1] 2 3
想要得到类似table()函数输出的分组统计结果,统计每个向量的出现次数:
Factor c(1,2) c('a', 'b') c(2,3) Freq 1 2 1
由于列表的每个元素是向量,无法直接用table()统计,因此需要先将每个子向量合并为单个字符串,再进行统计。
解决方案
直接使用以下代码即可完成合并与统计:
sapply(li, paste, collapse = "-") |> table()
代码说明
sapply(li, paste, collapse = "-"):遍历列表li中的每个向量元素,通过paste()函数将向量内的元素以-为分隔符合并成单个字符串,最终得到一个字符向量。|> table():借助管道符将合并后的字符向量传入table()函数,统计每个字符串(对应原列表中的向量)的出现频率。
该方案能够高效处理包含50万个元素的列表,满足你的需求。
内容的提问来源于stack exchange,提问作者clp
相关产品推荐
相关产品推荐

