解释R tapply描述
我明白在R中tapply()是做什么的。但是,我无法从文档中解析它的描述:
Apply a Function Over a "Ragged" Array Description: Apply a function to each cell of a ragged array, that is to each (non-empty) group of values given by a unique combination of the levels of certain factors. Usage: tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
当我想到tapply时,我想通过sql来分组。 您将X中的值按其在INDEX中的平行因子水平进行分组,并将FUN分配给这些组。 我已经读了100次tapply的描述,但仍然无法弄清楚它如何描述我如何理解tapply。 也许有人可以帮我解析它?
让我们来看看R文档对这个主题的看法:
向量和标记因子的组合是有时称为不规则数组的一个例子,因为子类的大小可能是不规则的。 当子类大小完全相同时,索引可以隐含地完成并且更加高效,如我们在下一节中看到的那样。
您通过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))
@ joran的伟大答案帮助我理解了它(所以请投票支持他 - 如果不是太长,我会添加它作为评论),但这可能对某些人有帮助:
在很多语言中,你有两维数组。 根据语言,这些数组具有固定的维数(即:每行具有相同数量的列),或者某些语言允许每行的项目数量不同。 所以,而不是:
A: 1 2 3
B: 4 5 6
C: 7 8 9
你可以得到类似的东西
A: 1 3
B: 4 5 6
C: 8
这被称为粗糙的数组,因为它的右侧看起来很粗糙。 在典型的R型中,我们可能将其表示为两个向量:
values<-c(1,3,4,5,6,8)
names<-c("A", "A", "B", "B", "B", "C")
所以tapply
与这两个向量作为第一个参数确实让我们给这个函数适用于我们的衣衫褴褛的阵列中的每个“行”。
上一篇: Explain R tapply description
下一篇: Grouping functions (tapply, by, aggregate) and the *apply family