计算列表中因子的频率()

时间:2013-11-19 17:22:02

标签: r

我有一个包含10个不同列表元素的列表,每个列表元素包含20个早餐项目的样本,可以在这里复制...

Diet <- as.factor(rep(c("Eggs","Meat","Eggs","Milk", "Juice"),20))

> head(Diet)
[1] Eggs  Meat  Eggs  Milk  Juice Eggs 
Levels: Eggs Juice Meat Milk

for()循环创建10个列表元素。

  breakfast <- list()
    for ( i in 1:10) {
        breakfast[[i]] <- sample(Diet,20)
        }

对于每个列表元素1:10我试图计算“鸡蛋”出现的次数。这是一个看似简单的任务,但我必须在其他SO帖子上搜索错误的关键词,因为我从Goog等人那里得到的帮助很少。

我认为最好的选择是添加类似

的内容
NumEggs <- length(breakfast[[i]]==”Eggs” 

for()循环,但此代码不正确并返回全长(即20),而不仅仅是“Eggs”的长度。

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

这应该有效:

> sapply(breakfast, function(x)sum(x=="Eggs"))
 [1] 10  9 11  6  9  8  8  7  7 10

答案 1 :(得分:1)

如果你想知道为什么你自己的尝试不起作用,那是因为

length(breakfast[[i]]=="Eggs")

实际上是在测量逻辑向量的长度,在你的情况下总是为20:

breakfast[[9]]=="Eggs"
 [1] FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE
[13]  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE

您可以使用:

length(which(breakfast[[i]]=="Eggs"))

检查仅由TRUE值构成的向量的长度。像user1981275建议的总和也可用作求和将TRUE视为1,将FALSE视为0。