【发布时间】:2015-08-25 01:01:29
【问题描述】:
我有一个调查数据的数据框,我想从中获取相对频率。
我从文件中制作了一个唯一属名的向量:
> CoralGenera <- unique(dfrm$V5)
然后对于向量(CoralGenera)中的每个元素(Genus),我想运行这个函数:
> mean(dfrm$V5 == "Genus")
但它会将每个字符串保存为向量中的一个元素,以便在阻碍我的函数中使用。
我试过了:
> for (Genus in CoralGenera){
CGrfreq <- c(CGrfreq,mean(dfrm$Genus == Genus))}
哪个运行了,但返回的向量比 CoralGenera 的元素多
我一直在尝试使用 lapply() 来避免复制,但无法让它工作:
> lapply(seq_along(CoralGenera), mean(dfrm$Genus == Genus))
> lapply(Genus(CoralGenera), mean(dfrm$Genus == "Genus"))
> lapply(CoralGenera, mean(dfrm$Genus == x))
> lapply(CoralGenera, mean(dfrm$Genus == CoralGenera[v]))
每次它返回如下错误消息: match.fun(FUN) 中的错误: 'mean(dfrm$Genus == Genus)' 不是函数、字符或符号
这是我第一次在 R 中编写这样的代码,因此非常感谢任何帮助。
【问题讨论】:
-
lapply(CoralGenera, function(x) mean(dfrm$Genus[ dfrm$Genus %in% x] ))。更容易的是with(dfrm, aggregate(Genus, V5, mean))。如果您想要一个向量而不是数据框,也可以使用tapply。构造dfrm$Genus == x将返回一个逻辑向量,mean将强制转换为 0 和 1 而不是值。