【问题标题】:refer to vector element in R参考 R 中的向量元素
【发布时间】: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 而不是值。

标签: r loops vector


【解决方案1】:

从你想要的意思不清楚。试试这个:

sapply(CoralGenera, function(genus) mean(dfrm$Genus[dfrm$V5 == genus]))
sapply(CoralGenera, function(genus) mean(dfrm$V5[dfrm$V5 == genus]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多