我有一个包含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”的长度。
任何建议都表示赞赏。
答案 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。