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

R 计算列表中某个因子的频率(),r,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 饮食头(饮食) [1] 鸡蛋肉鸡蛋牛奶汁鸡蛋 等级:鸡蛋汁肉牛奶 for()循环创建10个列表元

我有一个包含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
饮食头(饮食)
[1] 鸡蛋肉鸡蛋牛奶汁鸡蛋
等级:鸡蛋汁肉牛奶
for()循环创建10个列表元素

  breakfast <- list()
    for ( i in 1:10) {
        breakfast[[i]] <- sample(Diet,20)
        }
早餐这应该有效:

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

如果你想知道为什么你自己的尝试没有成功,那是因为

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"))

检查仅由真值生成的向量的长度。与user1981275类似的Sum建议也适用,因为SUMMIT会将TRUE视为1,将FALSE视为0。

感谢您的有益解释。
length(which(breakfast[[i]]=="Eggs"))