Как перебрать список фреймов данных в R - PullRequest
9 голосов
/ 19 февраля 2011

У меня есть список в R, который содержит несколько фреймов данных. Я хочу перебрать кадры данных и вычислить минимальное / максимальное значения из кадра данных. Вот код, который у меня есть сейчас:

firstname = names(dats)[1]
xlim = c( min( dats[[firstname]][,xlab] ), max( dats[[firstname]][,xlab] ) )
for ( name in names(dats) ) {
   xlim = c( min(xlim[1],dats[[name]][,xlab]), max(xlim[2],dats[[name]][,xlab]) )
} 

Это кажется мне уродливым, так как для выполнения чего-то очень простого требуется много кода. Есть ли более канонический способ сделать это в R?

Ответы [ 3 ]

10 голосов
/ 19 февраля 2011

Вы можете использовать lapply для извлечения столбца xlab из всех фреймов данных и unlist для объединения в один вектор, а затем взять min или max:

xlab <- 'a'
dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
              df2 = data.frame(a=sample(1:3), b = sample(11:13)))

>  min( unlist( lapply( dats, '[', xlab ) ) )
[1] 1
>  max( unlist( lapply( dats, '[', xlab ) ) )
[1] 3
3 голосов
/ 20 февраля 2011

Можно ли объединить фреймы данных из списка фреймов данных в один фрейм данных?Я бы использовал пакеты plyr и rbind.fill, которые позволили бы кадрам данных иметь несовпадающие столбцы, если интересующий столбец назван одинаково во всех фреймах данных.

library(plyr)
df.orig <- data.frame(one = rep(1:4, each = 4), two = 1:16)
df.list <- dlply(df.orig, "one")
df.new <- rbind.fill(df.list)
xlim <- with(df.new, c(min(two), max(two)))
1 голос
/ 19 февраля 2011

Если я правильно понимаю вопрос, вот что-то связанное с plyr:

dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
              df2 = data.frame(a=sample(1:3), b = sample(11:13)))

library(plyr)

xlim <- adply(do.call("rbind",dats),2,function(x)c(min(x),max(x)))
    names(xlim)=c("xlab","min","max")

xlim
  xlab min max
1    a   1   3
2    b  11  13

Дает каждой переменной минимальное и максимальное значения, свернутые во всех фреймах данных в списке.

РЕДАКТИРОВАТЬ: сокращен код abit. Я предполагаю, что каждый фрейм данных содержит одинаковое количество столбцов в одинаковом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...