具有分類變量catA,catB和catC的示例數據框。 Obs是一些觀測值。將函數應用於分類變量的所有可能組合的子集的數據框
catA <- rep(factor(c("a","b","c")), length.out=100)
catB <- rep(factor(1:4), length.out=100)
catC <- rep(factor(c("d","e","f")), length.out=100)
obs <- runif(100,0,100)
dat <- data.frame(catA, catB, catC, obs)
通過分類變量的所有可能的數據子集。現在
allsubs <- expand.grid(catA = c(NA,levels(catA)), catB = c(NA,levels(catB)),
catC = c(NA,levels(catC)))
> head(allsubs, n=10)
catA catB catC
1 <NA> <NA> <NA>
2 a <NA> <NA>
3 b <NA> <NA>
4 c <NA> <NA>
5 <NA> 1 <NA>
6 a 1 <NA>
7 b 1 <NA>
8 c 1 <NA>
9 <NA> 2 <NA>
10 a 2 <NA>
,什麼是創建與含有從施加到的DAT相應的子集(由貓變量的組合在每行中所定義的)的函數的結果的結果列的輸出數據幀的最簡單的方法。所以輸出應該看起來像下面的數據框'whatiwant',其中結果列將包含應用於每個子集的函數的結果。
> whatiwant
catA catB catC results
1 <NA> <NA> <NA> *
2 a <NA> <NA> *
3 b <NA> <NA> *
4 c <NA> <NA> *
5 <NA> 1 <NA> *
6 a 1 <NA> *
7 b 1 <NA> *
8 c 1 <NA> *
9 <NA> 2 <NA> *
10 a 2 <NA> *
所以,如果應用的功能是 '平均',結果應該是:
dat$results[1] = mean(subset(dat,)$obs)
dat$results[2] = mean(subset(dat, catA=="a")$obs)
等等,等等。
偉大的答案。我已經調整它爲data.tables [這裏](https://stackoverflow.com/a/45341665/4241780)。 – JWilliman