2015-04-29 2 views
-3

Я управляю данными в трех разных классах - tbl_df, tbl и data.frame - по некоторым причинам.Список данных в R

То, что я пытаюсь сделать, это составить список из нескольких данных, как Belows:

data1 with tbl_df, tbl, and data.frame. 
data2 with tbl_df, tbl, and data.frame. 
data3 with tbl_df, tbl, and data.frame. 

list[1] means data1 
list[2] means data2 
list[3] means data3 

Однако, я с удивлением понял, что это слишком трудно найти, как это сделать. Я был бы признателен за ответ. Благодарю.

+0

что вы принимаете? какой результат вы хотите? На данный момент ваш вопрос непонятен. –

ответ

1

Когда вы принудить data.frame к tbl_df из dplyr пакета, объект получает еще два класса обозначения, а именно tbl_df и tbl.

library(dplyr) 
class(tbl_df(data.frame(x = runif(5), y = runif(5)))) 
[1] "tbl_df"  "tbl"  "data.frame" 

Они более или менее такой же, как data.frames, с небольшой разницей, когда дело доходит до печати. От ?tbl_df:

Основное преимущество использования tbl_df над регулярным кадра данных является печати: TBL объекты только напечатать несколько строк и все столбцы, которые поместиться на одном экране, описывающие остальное как текст.

Суть в том, что вы можете использовать объект класса tbl_df, tbl и data.frame точно как data.frame`.

Если вы хотите рассчитать среднее значение всего набора данных, возможно, лучшей структурой будет matrix?

В любом случае, в приведенном ниже примере я вычисляю средства столбцов и сохраняю результат в списке. Пример может быть оптимизирован с использованием функций sapply и lapply.

library(dplyr) 
data1 <- tbl_df(data.frame(x = runif(5), y = runif(5))) 
data2 <- tbl_df(data.frame(x = runif(5), y = runif(5))) 
data3 <- tbl_df(data.frame(x = runif(5), y = runif(5))) 

list.of.dfs <- ls(pattern = "data") 

list.of.means <- vector("list", 3) 
names(list.of.means) <- list.of.dfs 

for (i in list.of.dfs) { 
    my.df <- get(i) 
    list.of.means[[i]] <- colMeans(my.df) 
} 

> list.of.means 
$data1 
     x   y 
0.4895666 0.4219187 

$data2 
     x   y 
0.4100487 0.2763898 

$data3 
     x   y 
0.6123135 0.5033225 
+0

Я не совсем согласен с тем, что вы можете использовать объект класса tbl_df, tbl и data.frame точно так же, как data.frame. ". Зачем? 'tbl_df' никогда не упрощают одиночные данные data.frames к атомным векторам, тогда как 'data.frame' делают это по умолчанию, и я считаю это существенным отличием. Сравните, например: 'x <- tbl_df (iris); x [, 1] 'с' iris [, 1] '. –

+0

Согласен, значение 'drop = FALSE' в' tbl_df' иногда имеет значение. –

Смежные вопросы