Вы можете использовать [
с именами столбцов фреймов данных и их индексами. Таким образом, foo[4]
будет иметь тот же результат, что и foo["bias"]
(при условии, что bias
- это имя четвертого столбца).
$bias
на самом деле не имя этого столбца. $
- это просто еще одна функция в R, такая как [
, которая используется для доступа к столбцам фреймов данных (среди прочего).
Но теперь я собираюсь выйти на передний план и дать несколько советов о вашей структуре данных. Если каждый элемент вашего вложенного списка содержит данные для уникальной комбинации station
и member
, вот упрощенная игрушечная версия ваших данных:
dat <- expand.grid(station = rep(1:3,each = 2),member = rep(1:3,each = 2))
dat$bias <- sample(50:100,36,replace = TRUE)
tmp <- split(dat,dat$station)
tmp <- lapply(tmp,function(x){split(x,x$member)})
> tmp
$`1`
$`1`$`1`
station member bias
1 1 1 87
2 1 1 82
7 1 1 51
8 1 1 60
$`1`$`2`
station member bias
13 1 2 64
14 1 2 100
19 1 2 68
20 1 2 74
etc.
tmp
- это список длины три, где каждый элемент сам является списком длины три. Каждый элемент представляет собой фрейм данных, как показано выше.
Действительно гораздо проще записать данные такого типа в виде одного фрейма данных. Вы заметите, что я построил его таким образом (dat
), а затем разделил его дважды. В этом случае вы можете rbind
все это снова, используя код, подобный следующему:
newDat <- do.call(rbind,lapply(tmp,function(x){do.call(rbind,x)}))
rownames(newDat) <- NULL
В этой форме вычисления такого рода намного проще:
library(plyr)
#Find the max bias for each unique station+member
ddply(newDat,.(station,member),summarise, mx = max(bias))
station member mx
1 1 1 87
2 1 2 100
3 1 3 91
4 2 1 94
5 2 2 88
6 2 3 89
7 3 1 74
8 3 2 88
9 3 3 99
#Or maybe the max bias for each station across all members
ddply(newDat,.(station),summarise, mx = max(bias))
station mx
1 1 100
2 2 94
3 3 99