2015-04-29 91 views
-3

我管理三個不同類(tbl_df,tbl和data.frame)中的數據 - 出於某些原因。R中的數據列表

我嘗試做的是使像初級講座幾個數據列表:

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

當從dplyr包強迫一個data.frametbl_df,對象接收兩個更多類名稱,即tbl_dftbl

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類,tbldata.frame酷似data.frame`的對象。

如果你的意思是計算整個數據集的平均值,或許更好的結構是matrix

在任何情況下,在下面的例子中,我計算列的方法並將結果存儲在列表中。該示例可以使用sapplylapply函數進行優化。

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

我同意,'tbl_df'中的'drop = FALSE'默認值有時會有所不同。 –