R 计算列表中某个因子的频率()
我有一个包含10个不同列表元素的列表,每个元素包含20个早餐项目的样本,可以在这里复制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个列表元
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"))