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

use*_*815 4 element r list

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

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"))  
Run Code Online (Sandbox Code Playgroud)

现在我想计算列表每行的元素数量.
我想要的输出看起来像这样:

[1] 4  
[2] 3  
[3] 7  
[4] 1  
[5] 2  
Run Code Online (Sandbox Code Playgroud)

除此之外,我想知道每行中出现"CHARLES"一词的频率.
基于我的例子,我想获得类似于此的输出:

[1] 1  
[2] 1  
[3] 3  
[4] 1  
[5] 2  
Run Code Online (Sandbox Code Playgroud)

我想到了这个:

> table(A)  
Error in table(A) : all arguments arguments must have same length  
> sum(A)  
Error in sum(A) : invalid 'type' (list) of argument  
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我不知道如何处理这些错误消息,也不知道替代方案.
我知道列表的行数是:

> length(A)  
[1] 5  
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这并没有回答我的问题.我也找不到任何其他答案.
因此,我想请你帮我计算这两项措施!

非常感谢你提前!

Jul*_*ora 6

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
Run Code Online (Sandbox Code Playgroud)


And*_*rie 6

你应该熟悉lapplysapply循环列表:

sapply(A, length)
[1] 4 3 8 1 2

sapply(A, function(x)sum(grepl("CHARLES", x)))
[1] 1 1 3 1 2
Run Code Online (Sandbox Code Playgroud)

grepl()将正则表达式与文本匹配的是什么,并根据是否匹配返回TRUE或FALSE.然后,我sum()对这些逻辑值进行了处理,即将TRUE值相加.