2016-05-10 60 views
0

我有一個矩陣B是10行×2列:使用聚合得到重複行的平均在data.frame r中

B = matrix(c(1:20), nrow=10, ncol=2) 

某些行是技術重複,它們對應到長度爲20(列表1)的列表中相同的 號碼。

list1 = c(1,1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8,8) 
list1 = as.list(list1) 

我想使用此列表(列表1)採取任何重複的值的平均值爲所有列中B使得我結束了一個矩陣或data.frame具有8行和2列(所有重複數據平均)。

這裏是我的代碼:

aggregate.data.frame(B, by=list1, FUN=mean) 

並生成該錯誤:

Error in aggregate.data.frame(B, by = list1, FUN = mean) : 
    arguments must have same length 

我在做什麼錯?

謝謝!

+0

我很困惑,你想拿出重複,然後得到那些的意思? – cgage

回答

0

您的數據有2個變量(2列),每個變量有10個觀察值(10行)。函數aggregate.data.frame預計列表中的元素與變量中觀察值的數量具有相同的長度。由於列表中的矢量有20個值,而每個變量只有10個觀測值,所以出現錯誤。因此,例如,你可以這樣做,因爲現在你有1個變量,有20個觀察值,而列表1有20個元素的向量。

B <- 1:20 
list1 <- list(B=c(1,1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8,8)) 
aggregate.data.frame(B, by=list1, FUN=mean) 

該代碼也可以工作,如果你給它一個2列20行的矩陣。

aggregate.data.frame(cbind(B,B), by=list1, FUN=mean) 

我想這個答案解決了爲什麼你會得到一個錯誤。但是,我不確定它是否解決了您實際嘗試執行的操作。你如何期望結束8行2列?該矩陣中的單元格究竟代表什麼?

+0

非常感謝!這工作! – alita249986