You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中对列表元素分组并统计出现次数的方法

针对大数据场景,我推荐几个高效的实现方案——从基础R工具到专门的高性能包都有,你可以根据自己的需求选择:

方案1:基础R的table()函数(简单易用,中小数据足够)

这是最直接的原生方法,不需要额外安装包,中小数据量下完全够用:

l = list("Android", "iPhone", "Android", "iPhone", "iPhone")
# 先把列表转成向量,再统计频次
freq_table = table(unlist(l))
# 提取唯一元素
a = names(freq_table)
# 提取对应频次,转成数值向量
b = as.vector(freq_table)

运行后a就是c("Android", "iPhone"),b就是c(2, 3),完美匹配你的需求。不过如果数据量达到百万甚至千万级,这个方法的效率会不如专门的高性能包。

方案2:data.table包(大数据场景首选,速度拉满)

data.table是R里处理大数据的标杆工具,内存占用低、运算速度极快,非常适合你的大数据场景:
先安装包(如果还没装的话):

install.packages("data.table")

然后用下面的代码实现:

library(data.table)
# 把列表转成data.table的一列
dt = data.table(item = unlist(l))
# 按item分组,统计每组的数量(.N是data.table内置的计数变量)
result = dt[, .N, by = item]
# 提取结果
a = result$item
b = result$N

这个方法在处理超大数据时,性能比基础R好几个量级,而且代码也很简洁。

方案3:dplyr包(tidyverse风格,可读性强)

如果你习惯tidyverse的语法风格,dplyr的实现也很高效,代码可读性拉满:
先安装包:

install.packages("dplyr")

然后实现:

library(dplyr)
# 把列表转成tibble(增强版数据框)
df = tibble(item = unlist(l))
# 用count函数直接分组统计频次
result = df %>% count(item)
# 提取结果
a = result$item
b = result$n

count()函数本质就是分组计数,代码非常直观。这个方法的性能略逊于data.table,但比基础R好很多,适合喜欢tidyverse生态的用户。

小提示:如果你的输入本身可以直接转成向量(比如列表里都是单一元素,没有嵌套),可以省略unlist()步骤,直接用向量作为输入,效率会更高哦!

内容的提问来源于stack exchange,提问作者alyssaeliyah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:21:21