簡體   English   中英

解釋R tapply描述

[英]Explain R tapply description

我了解 tapply() 在 R 中的作用。 但是,我無法從文檔中解析它的描述:


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 中的 group by。 您可以通過 INDEX 中的平行因子水平將 X 中的值組合在一起,並將 FUN 應用於這些組。 我已經閱讀了 tapply 的描述 100 次,但仍然無法弄清楚它所說的內容如何映射到我對 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 的出色回答幫助我理解了它(所以請投票給他 - 如果它不是太長的話,我會添加它作為評論),但這可能對某些人有幫助:

在相當多的語言中,你有二維 arrays。 根據語言,這些 arrays 具有固定尺寸(即:每行具有相同的列數),或者某些語言允許每行的項目數不同。 所以而不是:

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應用於我們參差不齊的數組的每個“行”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM