我了解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/