我了解tapply()在R中的作用。但是,我无法从文档中解析此描述:

在“参差不齐”的数组上应用函数

描述:

将函数应用于参差不齐的数组的每个单元,即对每个单元
(非空)一组值,这些值由
某些因素的水平。

用法:

tapply(X,INDEX,FUN = NULL,...,简化= TRUE)

当我想到tapply时,我想到了sql中的group by。您可以将X中的值与INDEX中的并行因子水平分组在一起,然后将FUN应用于这些组。我已经阅读了Tapply 100次的描述,但仍然无法弄清它的内容如何映射到我对Tapply的理解。也许有人可以帮我解析它?

最佳答案

让我们看看R documentation在这个问题上说了什么:



您通过INDEX提供的因子列表一起指定了X子集的集合,这些子集的长度可能不同(因此,“参差不齐”的描述符)。然后将FUN应用于每个子集。

编辑:@Joris在评论中提出了一个很好的观点。将tapply(X,Y,...)视为sapply(split(X,Y),...)的包装可能会有所帮助,因为如果Y是分组因子的列表,它将根据其唯一级别构建一个新的单个分组因子,相应地将X拆分并将FUN应用于每个片段。

编辑:这是一个说明性的示例:

library(lattice)
library(plyr)
set.seed(123)

#Make this example unbalanced
dat <- barley[sample(1:120,50),]

#Suppose we want the avg yield by year/site:
table(dat$year,dat$site)

#That's what they mean by 'ragged' array; there are different
# numbers of obs at each comb of levels

#In plyr we could use ddply:
ddply(dat,.(year,site),.fun=function(x){mean(x$yield)})

#Which gives the same result (listed in a diff order) as:
melt(tapply (dat$yield, list (dat$year, dat$site), mean))

关于r - 解释R Tapply描述,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6297201/

10-14 15:23