r - 计算R中列表元素的数量和频率?

标签 r list element

我有一个很长的列表,其中包含不同数量的元素,这些元素也可以在同一字段中重复出现。
这是前五行的示例:

A <- list(c("JAMES","CHARLES","JAMES","RICHARD"),  
          c("JOHN","ROBERT","CHARLES"),  
          c("CHARLES","WILLIAM","CHARLES","MICHAEL","WILLIAM","DAVID","CHARLES","WILLIAM"),  
          c("CHARLES"),  
          c("CHARLES","CHARLES"))  

现在我想计算列表中每一行的元素数。
我想要的输出看起来类似于:
[1] 4  
[2] 3  
[3] 7  
[4] 1  
[5] 2  

除此之外,我想知道术语“CHARLES”在每一行中出现的频率。
根据我的示例,我想获得与此类似的输出:
[1] 1  
[2] 1  
[3] 3  
[4] 1  
[5] 2  

我想到了这个:
> table(A)  
Error in table(A) : all arguments arguments must have same length  
> sum(A)  
Error in sum(A) : invalid 'type' (list) of argument  

但不幸的是,我不知道如何处理这些错误消息,也不知道替代方案。
我知道列表的行数是:
> length(A)  
[1] 5  

但这并不能回答我的问题,不幸的是。我也找不到任何其他答案。
所以我想请你帮我计算一下这两个度量!

非常感谢您提前!

最佳答案

sapply(A, function(x) length(x))
[1] 4 3 8 1 2
un <- unique(unlist(A))
nm <- lapply(un, function(x) sapply(A, function(y) sum(y == x)))
names(nm) <- un
nm
$JAMES
[1] 2 0 0 0 0

$CHARLES
[1] 1 1 3 1 2

$RICHARD
[1] 1 0 0 0 0

$JOHN
[1] 0 1 0 0 0

$ROBERT
[1] 0 1 0 0 0

$WILLIAM
[1] 0 0 3 0 0

$MICHAEL
[1] 0 0 1 0 0

$DAVID
[1] 0 0 1 0 0

关于r - 计算R中列表元素的数量和频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11048147/

相关文章:

r - 使用 dplyr 管道将 for 循环的输出提取到 R 中的数据帧中

r - Ggplot 小网格线与(禁用的)主要网格线重合时不显示

list - 简单的序言程序。出现错误: >/2: Arguments are not sufficiently instantiated

javascript - 我如何让这个脚本将元素集中在 keydown/keypress 上?

r - ggplot2 boxplot中位数未按预期绘制

c++ - 改变列表中元素的值 C++

python - 在 Python 中比较列表项

java - 按特定元素对对象的 ArrayList 进行排序

list - LINQ 查询从 csv 文件的列表中查找元素

r - 如何在R中的 map 中的特定位置绘制数据点